Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2478 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Les joies des sessions.

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Les joies des sessions.

n°1242944
babeuf
Posté le 10-11-2005 à 11:03:31  profilanswer
 

Bonjour !  
 
Je bosse en ce moment sur un projet de site : www.webnavets.tk
 
Et j ai un probleme au niveau de mon systeme d'auth login/pass
 
Pour la plupart des utilisateurs, tout se déroule normallement, mais pour une partie non négligeable d entre eux il est impossible de se logguer. Je précise : Il s identifient via le formulaire, aucun message d erreur ne s affiche mais la session ne fonctionne pas puisque toutes les opérations réservées aux membres enregistrés leurs sont interdites .
 
Voila le code :  
 
Ce bout de code se trouve en haut de mes pages. (initialisation de la session et récupération des variables si l utilisateur est loggué).
 
 

Code :
  1. <?
  2. session_start();
  3. if (session_is_registered(login) && $_SESSION[login] != ''){
  4. $ident = $_SESSION[ident];
  5. $login = $_SESSION[login];
  6. $rankid = $_SESSION[rankid];
  7. }
  8. ?>


 
ma page de login (elle commence elle aussi par le bout de code précédent.):  
 

Code :
  1. include('config.php');
  2. @mysql_connect($host,$log,$pass);
  3. @mysql_select_db($dbname);
  4. $rep = @mysql_query("select * from users where login = '".$login."' and password = '".$password."'" );
  5. $res = @mysql_fetch_array($rep);
  6. if ($res != "" )
  7.     
  8. {
  9. <?
  10. session_register("login" );
  11. session_register("ident" );
  12. session_register("rankid" );
  13. $_SESSION['ident'] = $res['id'];
  14. $_SESSION['login'] = $res['login'];
  15. $_SESSION['rankid'] = $res['rankid'];
  16. echo("<script>document.location.replace('index.php');</script>" );
  17. }
  18. ?>


 
 
Voici enfin un bout de code d une des pages réservées aux membres :  
 

Code :
  1. <?
  2. // Si l internaute est loggué
  3. if ($_SESSION['login'] != "" ) {
  4. //on affiche le formulaire qui va bien :
  5. echo "
  6.             <table width='80%'  border='1' cellspacing='0' cellpadding='0'>
  7.                               <tr>
  8.                                 <td><div align='justify'>
  9.                                     <p>Vous voici sur le formulaire d'ajout d'un site.</p>
  10.                                     <p>N'oubliez pas que ce dernier doit respecter notre charte. Ne profitez pas de Naweb pour r&eacute;f&eacute;rencer vos sites (sauf &eacute;videmment si ces derniers sont  tr&egrave;s laids). Tout site suspect sera effac&eacute; dans les plus brefs d&eacute;lais.</p>
  11.                                     <p>Merci de faire vivre Naweb ! </p>
  12.                                 </div></td>
  13.                               </tr>
  14.                             </table>
  15.                             <form name='form1' method='post' action='proposer2.php'>
  16.                               <table width='90%'  border='0' cellspacing='3' cellpadding='0'>
  17.                                 <tr>
  18.                                   <td width='74%'><strong>Nom : ( * ) </strong></td>
  19.                                   <td width='26%'><input name='nom' type='text' id='nom' size='40' maxlength='60'></td>
  20.                                 </tr>
  21.                                 <tr>
  22.                                   <td><strong>Adresse (URL)  : ( * ) </strong></td>
  23.                                   <td>http://
  24.                                     <input name='url' type='text' id='url' size='33' maxlength='100'></td>
  25.                                 </tr>
  26.                                 <tr>
  27.                                   <td><strong>Cat&eacute;gorie : </strong></td>
  28.                                   <td><select name='categ' id='categ'>";
  29.         
  30.                                   include('config.php');
  31.    @mysql_connect($host,$log,$pass);
  32.    @mysql_select_db($dbname);
  33.   $rep = @mysql_query("select * from categories order by nom" );
  34.   while ( $res = mysql_fetch_array($rep)) {
  35.   echo "<option value='".$res['id']."'>".$res['nom']."</option>";}
  36.   echo "   </select></td>
  37.                                 </tr>
  38.                                 <tr>
  39.                                   <td><strong>Description : ( * ) </strong></td>
  40.                                   <td><textarea name='comment' cols='30' rows='4' id='comment'></textarea></td>
  41.                                 </tr>
  42.                               </table>
  43.                               <p>
  44.                                 <input type='submit' name='Submit' value='Ajouter' class='bouton' onClick=\"return testerFormulaire(this.form)\">
  45.                               </p>
  46.                               </form>";  }
  47.        
  48. // Si l utilisateur n est pas loggué :
  49. else echo "<strong>Vous devez vous enregistrer pour pouvoir proposer un site !</strong><br><br>";
  50. ?>

 
 
 
Alors ? quelqu un comprend pourquoi cela fonctionne, mais pas chez tout le monde ?  
 
 
 

mood
Publicité
Posté le 10-11-2005 à 11:03:31  profilanswer
 

n°1243038
sielfried
Posté le 10-11-2005 à 12:05:51  profilanswer
 

Commence par virer tous ces @ devant tes fonctions mysql et vérifie qu'elles ne produisent pas d'erreurs.
 
Soit dit en passant, pour tester l'existence d'une session, session_is_registered est obsolète.


Message édité par sielfried le 10-11-2005 à 12:06:02

---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
n°1243049
babeuf
Posté le 10-11-2005 à 12:11:08  profilanswer
 

les fonctions mysql marchent sans probleme. Comme je l ai dis, l ensemble fonctionne normallement pour la plupart des internautes.  
 

n°1243059
sielfried
Posté le 10-11-2005 à 12:17:18  profilanswer
 

Pas forcément, non.
 
@, ça dit bien de masquer les erreurs, et c'est mal (à moins de soi-même prendre en compte l'erreur retournée par la fonction, ce que tu ne fais pas).


Message édité par sielfried le 10-11-2005 à 12:19:37

---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
n°1243070
babeuf
Posté le 10-11-2005 à 12:22:19  profilanswer
 

j ai viré les @, je n ai pas de message d erreur. je les avait mis juste pour faire joli ...
 
Le truc qui est embetant, c est que vu que tout fonctionne sans probleme de chez moi, je n arrive pas trop a voir d ou vient le probleme.


Message édité par babeuf le 10-11-2005 à 12:23:33
n°1243077
art_dupond
je suis neuneu... oui oui !!
Posté le 10-11-2005 à 12:25:17  profilanswer
 

ca ne viendrait pas du niveau de sécurité de ie (cookies pas accepté ou quelque chose comme ca) ?
 
 
essaye en rajoutant  
 

Code :
  1. ini_set('session.use_only_cookies', 'Off');


 
 
 
ps: pour voir si le problème vient de là, essaye avec ie en montant au max le niveau de sécurité


Message édité par art_dupond le 10-11-2005 à 12:26:37

---------------
oui oui
n°1243078
thiebo1237​5
Posté le 10-11-2005 à 12:25:52  profilanswer
 

quels sont les internautes pour lesquels ça ne marche pas ?  
Soit dit au passant, ton code de vérification est assez compliqué en effet, tu ne peux pas simplifier ça ?

n°1243079
sielfried
Posté le 10-11-2005 à 12:28:01  profilanswer
 

Manque un session_start dans ta page de login.
 
Et sur toutes tes pages d'ailleurs si c'est pas fait.


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
n°1243085
art_dupond
je suis neuneu... oui oui !!
Posté le 10-11-2005 à 12:32:27  profilanswer
 

ca devrait etre fait si ca marche pour certaine personnes.
 
sinon une remarque pour session_register
 

Citation :


 
Caution
 
If you want your script to work regardless of register_globals, you need to instead use the $_SESSION array as $_SESSION entries are automatically registered. If your script uses session_register(), it will not work in environments where the PHP directive register_globals is disabled.


 
là t'utilise les deux donc ca doit etre ok mais 'le gras' dit que dans ce cas, tes session_register() ne font doublon (enfin c'est ce que je comprends).


---------------
oui oui
n°1243086
sielfried
Posté le 10-11-2005 à 12:33:35  profilanswer
 

Je viens de m'inscrire et je peux pas me logger en tout cas.


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
mood
Publicité
Posté le 10-11-2005 à 12:33:35  profilanswer
 

n°1243090
art_dupond
je suis neuneu... oui oui !!
Posté le 10-11-2005 à 12:37:19  profilanswer
 

essaye peut etre en remplaçant  

Code :
  1. session_is_registered(login)


par  
 

Code :
  1. isset($_SESSION['login'])


 
 
on ne sait jamais...


---------------
oui oui
n°1243094
babeuf
Posté le 10-11-2005 à 12:48:17  profilanswer
 

alors . merci pour toutes ces réponses !  
pour le session_start() de la page login, il est en haut de page.  
 
(sur le bout de code présent partout)
 
pour les session_register qui font doublon, c est fort possible en effet mais ca n a pas l air d etre la cause du probleme.  
 
 
Effectivement, quand j augmente le niveau de sécurité de mon navigateur, je n arrive plus a ma logguer.
 
Ou dois je rajouter le ini_set('session.use_only_cookies', 'Off');
Sur toutes les pages ? A la premiere ouverture de session ? avant ou apres le session_start ?  
 
si je comprend bien, cette fonction modifie le php.ini c'est bien ca ? Cela peut il fonctionner chez free (le site est hébergé la bas) ?  
 
Quelqu un voit il comment je peux faire pour que mon site fonctionne avec un niveau de sécurité de ie élevé ?

n°1243095
babeuf
Posté le 10-11-2005 à 12:51:40  profilanswer
 

j ai bien remplacé les session_is_registered et supprimé les session_register() . Cela ne fait a priori aucune différence.

n°1243098
art_dupond
je suis neuneu... oui oui !!
Posté le 10-11-2005 à 12:53:04  profilanswer
 

dans toutes tes pages avant le session_start() je pense
 


Message édité par art_dupond le 10-11-2005 à 12:53:59

---------------
oui oui
n°1243101
babeuf
Posté le 10-11-2005 à 12:57:09  profilanswer
 

haha ! merci art dupond !  
 
Maintenant j arrive a me logguer dans a peu pres tous les niveaux de sécurité, sauf le plus haut : bloquer tous les cookies.  
 
Merci a tous !

n°1243103
sielfried
Posté le 10-11-2005 à 12:59:01  profilanswer
 

Moi j'arrive toujours pas. [:dawa]


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
n°1243105
babeuf
Posté le 10-11-2005 à 13:04:08  profilanswer
 

ah ben non en fait ca ne marche pas ... pourtant j y ai cru !

n°1243106
art_dupond
je suis neuneu... oui oui !!
Posté le 10-11-2005 à 13:06:38  profilanswer
 

mmm je ne sais pas.
 
Essaye alors de passer manuellement le sid (id de session) manuellement dans l'url (ca devrait le faire tout seul normalement)


---------------
oui oui
n°1243117
babeuf
Posté le 10-11-2005 à 13:17:49  profilanswer
 

alors : lors du login je renvoie le sid en parametre dans l url ( c est moche, mais a la limite si ca marche... )
 
de cette facon :  
 

Code :
  1. session_start();
  2. $_SESSION['ident'] = $res['id'];
  3. $_SESSION['login'] = $res['login'];
  4. $_SESSION['rankid'] = $res['rankid'];
  5. echo("<script>document.location.replace('index.php?sid=".session_id()."');</script>" );


 
Quel traitement dois je faire dans mes autres pages pour tenir compte de ce sid ?  
 

Code :
  1. <?
  2. ini_set('session.use_only_cookies', 'Off');
  3. $sid = trim(strip_tags($_GET['sid']));
  4. session_start();
  5. if (isset($_SESSION['login']) && $_SESSION[login] != ''){
  6. $ident = $_SESSION[ident];
  7. $login = $_SESSION[login];
  8. $rankid = $_SESSION[rankid];
  9. }
  10. ?>

n°1243126
babeuf
Posté le 10-11-2005 à 13:25:45  profilanswer
 

la fonction ini_set() renvoie false. Elle est bloquée chez free.
 
Vola ce que dit le phpinfo :  
 
session.use_cookies On On  
session.use_only_cookies Off Off  
 
 
 
 


Message édité par babeuf le 10-11-2005 à 13:34:46
n°1243133
art_dupond
je suis neuneu... oui oui !!
Posté le 10-11-2005 à 13:37:43  profilanswer
 

session_id($_GET['sid'])
 
 
edit: ah mais ton ah ben  session.use_only_cookies  est déjà à off -> ini_set inutile. essaye la "moche" solution [:spamafote]


Message édité par art_dupond le 10-11-2005 à 13:40:20

---------------
oui oui
n°1243140
babeuf
Posté le 10-11-2005 à 13:43:42  profilanswer
 

ca marche... mais je n ai pas d autre solution que de passer ce parametre en GET sur toutes mes pages ?  
 

n°1243143
art_dupond
je suis neuneu... oui oui !!
Posté le 10-11-2005 à 13:45:23  profilanswer
 

ca m'intéresserait aussi d'avoir une autre solution (meme si je pense que le résultat serait le meme - sid dans l'url, mais géré tout seul par php)


---------------
oui oui
n°1243148
babeuf
Posté le 10-11-2005 à 13:47:18  profilanswer
 

parceque la du coup .. je dois modifier tous mes liens un par un ?

n°1243158
babeuf
Posté le 10-11-2005 à 13:57:07  profilanswer
 

peut etre qu en créant un cookie proprement il serait accepté par la plupart des navigateurs ?

n°1243161
omega2
Posté le 10-11-2005 à 13:59:43  profilanswer
 

Il me semble qu'a partir d'un certain niveau de sécurité, IE refuse les cookies contenant des variables ayant certains noms. (liste que je ne conais pas, n'était pas tombé sur un de ces cas)

n°1243506
Lactique
Caraïbe et huile de coco
Posté le 10-11-2005 à 19:28:05  profilanswer
 

a mon avis ça marcherait pour tous si ils etaient sur ta page d'origine sans redir, .free.fr quoi.
Des que tu es sur ta redir certains navigateurs marchent d'autres, (ie) non sauf reglages speciaux genre site autorisé: free.fr etc... et niveau de secu bas.
c'est un probleme de strategie de secu des cookies qui semble (pour ie) venir d'un autre site quand il y a une redir et donc sont refusés.
 
A mon avis c'est ça, ça se détourne avec du code mais je sais pu lequel. le plus simple etant de laisser free.fr ou alors de chopper un vrai hebergeur .fr .com .org etc...


Message édité par Lactique le 10-11-2005 à 19:29:20
n°1248591
babeuf
Posté le 18-11-2005 à 16:42:33  profilanswer
 

j ai passé le sessid dans l url comme ca plus de probleme ! merci a tous etvenez nombreux sur www.webnavets.tk ! :D

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Les joies des sessions.

 

Sujets relatifs
probleme sessions panier[PHP] Besoin d'aide pour un systeme de login avec des sessions
debutant sessionsLes sessions
Gestion des sessions chez freeProblèmes entres sessions et affichage en pseudo frames
[RESOLU] Sessions - Quand variable vide[PHP]Sessions supprimées immédiatement
[php] SessionsPetite question sur les sessions
Plus de sujets relatifs à : Les joies des sessions.


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR