Les joies des sessions.

Les joies des sessions. - PHP - Programmation

Marsh Posté le 10-11-2005 à 11:03:31    

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 ?  
 
 
 

Reply

Marsh Posté le 10-11-2005 à 11:03:31   

Reply

Marsh Posté le 10-11-2005 à 12:05:51    

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
Reply

Marsh Posté le 10-11-2005 à 12:11:08    

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

Reply

Marsh Posté le 10-11-2005 à 12:17:18    

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
Reply

Marsh Posté le 10-11-2005 à 12:22:19    

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
Reply

Marsh Posté le 10-11-2005 à 12:25:17    

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
Reply

Marsh Posté le 10-11-2005 à 12:25:52    

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 ?

Reply

Marsh Posté le 10-11-2005 à 12:28:01    

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
Reply

Marsh Posté le 10-11-2005 à 12:32:27    

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
Reply

Marsh Posté le 10-11-2005 à 12:33:35    

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


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
Reply

Marsh Posté le 10-11-2005 à 12:33:35   

Reply

Marsh Posté le 10-11-2005 à 12:37:19    

essaye peut etre en remplaçant  

Code :
  1. session_is_registered(login)


par  
 

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


 
 
on ne sait jamais...


---------------
oui oui
Reply

Marsh Posté le 10-11-2005 à 12:48:17    

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é ?

Reply

Marsh Posté le 10-11-2005 à 12:51:40    

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

Reply

Marsh Posté le 10-11-2005 à 12:53:04    

dans toutes tes pages avant le session_start() je pense
 


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

---------------
oui oui
Reply

Marsh Posté le 10-11-2005 à 12:57:09    

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 !

Reply

Marsh Posté le 10-11-2005 à 12:59:01    

Moi j'arrive toujours pas. [:dawa]


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
Reply

Marsh Posté le 10-11-2005 à 13:04:08    

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

Reply

Marsh Posté le 10-11-2005 à 13:06:38    

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
Reply

Marsh Posté le 10-11-2005 à 13:17:49    

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. ?>

Reply

Marsh Posté le 10-11-2005 à 13:25:45    

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
Reply

Marsh Posté le 10-11-2005 à 13:37:43    

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
Reply

Marsh Posté le 10-11-2005 à 13:43:42    

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

Reply

Marsh Posté le 10-11-2005 à 13:45:23    

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
Reply

Marsh Posté le 10-11-2005 à 13:47:18    

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

Reply

Marsh Posté le 10-11-2005 à 13:57:07    

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

Reply

Marsh Posté le 10-11-2005 à 13:59:43    

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)

Reply

Marsh Posté le 10-11-2005 à 19:28:05    

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
Reply

Marsh Posté le 18-11-2005 à 16:42:33    

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

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed