Session en PHP

Session en PHP - PHP - Programmation

Marsh Posté le 29-12-2006 à 01:07:14    

Bonjour,
 
Voila, j'ai crée un petit site web qui utilise des varibles de session PHP.La session normalement est créée lorsque l'utilisateur est indentifié.  
Mais avec quelques utilisateur, j'ai un problème : Le site réagit comme si aucune session n'avait été crée (petit message, et renvoi vers la page d'accueil).
 
Voici le code de ma création de session :
 
session_start();
       
 $_SESSION['sessid'] = session_id();
 $_SESSION['uid'] = $trupass[1];
 $_SESSION['ulogin'] = $trupass[2];
 $_SESSION['ulvl'] = $trupass[3];

 
 
Et voila celui qui checke si mes sessions existent:
(inséré dans un fichier "id.php" que j'apelle au début de chaque page via un include)
 
 session_start();
   
  if(@$_SESSION['sessid'])
  {
    $sessid=$_SESSION['sessid'];  
    $uid=$_SESSION['uid'];
    $ulogin=$_SESSION['ulogin'];
    $ulvl=$_SESSION['ulvl'];
  }
  else
  {
    echo "Vous n'avez pas ouvert de session";
    echo "<p>Click <a href='login.php'>here</a> to be redirected on login page";
    exit;
  }

 
Ce qui est étrange c'est que seulement quelques utilisateurs sont impactés, ce qui pourrait faire penser à un pb de leur coté, mais bon nombre de site utilisent des sessions PHP et ils n'on pas de problème sur ceux là... Je pense plutot que ca vient de mon code qui doit etre un peu "Sale". :whistle:  
 
 
Merci d'avance de votre aide et bonnes F6etes à tous  :)  
 
 
 
 
 
 
 
 
 
 
 

Reply

Marsh Posté le 29-12-2006 à 01:07:14   

Reply

Marsh Posté le 29-12-2006 à 07:12:02    

ca vient de là surement -> $sessid=$_SESSION['sessid'];    
 
Laisse tes sessions telles quel et ne les transforme pas en variable...


---------------
Rien est impossible, il suffit d'y croire !
Reply

Marsh Posté le 29-12-2006 à 09:07:53    

Je ne suis pas sur, car dans le cas ou mon erreur se produit, le programme ne rentre jamais dans cette itération :
 
 
  if(@$_SESSION['sessid'])
  {
       [...]
  }
  else
  {
    echo "Vous n'avez pas ouvert de session";
    echo "<p>Click <a href='login.php'>here</a> to be redirected on login page";
    exit;
  }  
 
Mais dans la seconde qui affiche "Vous n'avez pas ouvert de session", etc...
 
Ceci dit c'est vrai, il n'est pas bien malin de transformer mes variables de session, je vais revoir çà.
 
Une autre idée ?

Reply

Marsh Posté le 29-12-2006 à 09:25:16    

if(isset($_SESSION['sessid'])) {
...
}
 
ça serait plus propre

Reply

Marsh Posté le 29-12-2006 à 09:38:10    

Voilà c'est fait, et j'ai mis la page en ligne.
Cà peut résoudre le problème à ton avis ?

Reply

Marsh Posté le 29-12-2006 à 10:22:49    

Cherche pas, c'est ta transformation des $_SESSION en variable...


---------------
Rien est impossible, il suffit d'y croire !
Reply

Marsh Posté le 29-12-2006 à 10:30:58    

par hasard, dans ton php.ini, t'aurais pas laissé register_globals à "on"?

Reply

Marsh Posté le 29-12-2006 à 12:48:06    

rufo :  
 
Voici le PHPINFO de mon hébergeur :  
 
Pour PHP4 :
http://www.wdmedia-hebergement.net/infos-php4.html
 
Et pour PHP5 :
http://www.wdmedia-hebergement.net/infos-php5.html
 
Donc les registers_globals sont activées dans la version php4 mais pas dans la php5. Ca pourrait être à l'origine de mon problème ?
 
 
Psykel :
 
Je ne comprends pas comment cette transformation peut poser problème à ce niveau là puisque elle ne s'effectue jamais. La condition if(@$_SESSION['sessid']) (Maintenant if(isset($_SESSION['sessid']))) n'est jamais validée, et c'est le code contenu dans le else{[...]} qui est exécuté et pas celui du if([...]{[...]}). De plus l'erreur se produit au chargement de ma 1ere page et donc à la premiere exécution de mon id.php.
Enfin, je peux me tromper, si tu peux m'éclairer :)

Reply

Marsh Posté le 29-12-2006 à 12:55:06    

Oui, je me trompe de variables...
 
C'est plutôt celle ci :
 
$_SESSION['sessid'] = session_id();  
 $_SESSION['uid'] = $trupass[1];  
 $_SESSION['ulogin'] = $trupass[2];  
 $_SESSION['ulvl'] = $trupass[3];
 
Elles ne sont pas retransmise...
 
Essaye d'ajouter ça, tu verra si ca fonctionne (juste pour tester) et aprés vois le register_globals
 

Citation :

global $trupass;
 
$_SESSION['sessid'] = session_id();  
 $_SESSION['uid'] = $trupass[1];  
 $_SESSION['ulogin'] = $trupass[2];  
 $_SESSION['ulvl'] = $trupass[3];


---------------
Rien est impossible, il suffit d'y croire !
Reply

Marsh Posté le 29-12-2006 à 12:59:25    

Je viens de virer mes...
 
    $sessid=$_SESSION['sessid'];  
    $uid=$_SESSION['uid'];
    $ulogin=$_SESSION['ulogin'];
    $ulvl=$_SESSION['ulvl'];  
 
...et de remplacer les occurences de ces variables dans mon code par des variables de session (bénie soit la fonction "Shearch/Replace in files" de PSPad, c'a má pris 3mn :) )
 
Je vais voir avec mon user si ca a résolu son problème.

Reply

Marsh Posté le 29-12-2006 à 12:59:25   

Reply

Marsh Posté le 29-12-2006 à 13:04:23    

Arf nos messages se sont croisés :)
 
Je vais tester. Pour info, voici les lignes qu génèrent le tableau $trupass (récupération de donées d'une requete SQL) :
 
$query = "SELECT usr_pass,usr_id,usr_login,usr_admin_lvl,usr_active,usr_valid FROM user WHERE usr_login ='".$login."'";
 
$result = mysql_query($query);
 
$trupass = mysql_fetch_array($result, MYSQL_NUM);  
 

Reply

Marsh Posté le 29-12-2006 à 13:07:12    

global $trupass;


---------------
Rien est impossible, il suffit d'y croire !
Reply

Marsh Posté le 29-12-2006 à 13:07:21    

ton user t'aurais pas fait une farce en mettant un ' dans son login?
Vérifie si c'est pas ta requête sql qui renvoie une erreur...

Reply

Marsh Posté le 29-12-2006 à 13:08:55    

Effectivement, il faut traiter le $login en amont... Y a tellement de choses probables que c'est pas évident de t'aider


---------------
Rien est impossible, il suffit d'y croire !
Reply

Marsh Posté le 29-12-2006 à 13:26:07    

Non, son pseudo est correct, j'ai mi un script pour vérifier. Mais je commence à me demander si il me dit bien tout, car tel qu'il me le décrit, c'est tout simplement impossible que celà ce produise... je vais mettre la "global $trupass;" et voir avec lui...

Reply

Marsh Posté le 29-12-2006 à 13:32:49    

Voici au cas ou les 2 pages incriminées (renomées em *.txt pour le coup) :
 
Page qui vérifie le login / mdp envoyés par POST et ouvre ensuite la session.
http://www.yahanet.wdmedia-heberge [...] _login.txt
 
Fichier php inséré via include au debut de chaque page.
http://www.yahanet.wdmedia-heberge [...] txt/id.txt

Reply

Marsh Posté le 29-12-2006 à 14:05:50    

et sur la première page, tu fais pas de session_start()?

Message cité 1 fois
Message édité par rufo le 29-12-2006 à 14:05:57
Reply

Marsh Posté le 29-12-2006 à 14:10:05    

Si tu veux mon avis, ton code est pas trés propre et securisé... Fonctionnalise le ou mieux, crée une classe php dédiée a tes gestions de logins/sessions


---------------
Rien est impossible, il suffit d'y croire !
Reply

Marsh Posté le 29-12-2006 à 14:21:38    

rufo a écrit :

et sur la première page, tu fais pas de session_start()?


 
Si, je la fais quand le login / password a été validé.
 
if ($trupass[5]=="y" ) // Account is validated : Starting session...
{
    session_start();
    [...]

Reply

Marsh Posté le 29-12-2006 à 14:29:16    

YaHa a écrit :

Si, je la fais quand le login / password a été validé.
 
if ($trupass[5]=="y" ) // Account is validated : Starting session...
{
    session_start();
    [...]


 
moi, je l'aurais mis en début de page le session_start()...

Reply

Marsh Posté le 29-12-2006 à 14:30:27    

Pyksel a écrit :

Si tu veux mon avis, ton code est pas trés propre et securisé... Fonctionnalise le ou mieux, crée une classe php dédiée a tes gestions de logins/sessions


 
Oui je vais optimiser tout çà mais je manque encore d'un peu de temps et surtout de conaissances, c'est sur que là ca fait brouillon.

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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