Précédent   Forum des professionnels en informatique > PHP > Langage > Sessions
Sessions Forum d'entraide sur les sessions avec PHP. Avant de poster -> FAQ sessions, Cours sessions et Sources sécurité
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 26/06/2008, 07h59   #1
Nouveau Membre du Club
 
Inscription : juin 2008
Messages : 33
Détails du profil
Informations forums :
Inscription : juin 2008
Messages : 33
Points : 28
Points : 28
Par défaut Perte de session aléatoire

Salut à tous,
Je sais que le sujet à déja été abordé dans quelques topics, mais je n'ai pas trouvé de réponse qui convenait à mon cas, alors pour ne pas 'polluer' le topic des autres, je crées le mien ..

Le problème est sensiblement le même :
Je perds aléatoirement mes sessions, le problème c'est que je n'sais jamais quand ca va arriver c'est assez rare, et la plus part du temps ca arrive à mes utilisateurs, parfois très fréquemment.

Le problème ne vient à priori pas du coté serveur car mon script a été testé sur plusieurs serveurs (2wamp et un apache sous fedora).

Est ce que vous voyez dans cette portion de code quelque chose qui pourrait poser problème ?

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
	session_name("xxx");
                session_start();
	if(time() - $_SESSION['timeout'] > 1800) // 1800 secondes = 30 min
	{
		session_destroy();
		session_name("xxx");
		session_start();
	}
	$_SESSION['timeout']=time();
	if (!isset($_SESSION['logged_pleh']) or @$_SESSION['logged_pleh'] != "connecté")
		die( '<script type="text/javascript">
		window.location="index.php?ordre='.@$_GET['ordre'].'&page='.@$_GET['page'].'&comm='.@$_GET['comm'].'";
		</script>');
J'ai fait des test avec print_r($_SESSION) il semble que parfois la superglobale se vide d'une page à l'autre, pourtant le code est bien inclus dans chaque page de mon script, il n'y a aucun doute la dessus .... et bien evidemment la perte de session a lieu bien avant les 30 minutes du timeout

J'espere que quelqu'un à déjà résolu ce genre de problème car je n'ai vu aucune réponse qui donnait une veritable solution dans d'autres posts

Merci à vous
tMSun est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/06/2008, 17h29   #2
Candidat au titre de Membre du Club
 
Inscription : juin 2008
Messages : 13
Détails du profil
Informations forums :
Inscription : juin 2008
Messages : 13
Points : 12
Points : 12
Dans la configuration de PHP est indiquée une durée d'expiration pour les sessions.
Il se peut simplement que tes sessions expirent au bout de la durée spécifiée par le serveur si aucune page n'a été rechargée entre temps.
Tu peux regarder du coté de session_cache_expire.
Rezouce est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/07/2008, 13h56   #3
Nouveau Membre du Club
 
Inscription : juin 2008
Messages : 33
Détails du profil
Informations forums :
Inscription : juin 2008
Messages : 33
Points : 28
Points : 28
Salut desolé j'été en congés ces 2 semaines, je me permet de remonter le topic

Citation:
Envoyé par Rezouce Voir le message
Il se peut simplement que tes sessions expirent au bout de la durée spécifiée par le serveur si aucune page n'a été rechargée entre temps.
Tu peux regarder du coté de session_cache_expire.
Le problème ne vient pas de la session.cache_expire est à 180 min, session.cookie_lifetime est à 0 (donc 'infini') et session.gc_maxlifetime est à 1440s.

Le problème c'est que c'est vraiment aléatoire, des fois on se logge je fais 3 actions et la session saute. La plus part du temps ca marche bien, mais fréquemment, on se fait éjecter et je n'voies vraiment pas la raison ....
tMSun est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/10/2009, 22h01   #4
Invité régulier
 
Inscription : janvier 2008
Messages : 7
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 7
Points : 5
Points : 5
Par défaut Session aléatoire

Bonjour,

Je rencontre exactement ce problème actuellement.

La session est perdue aléatoirement, parfois elle passe correctement d'autres fois pas du tout, impossible de trouver la règle qui régit ce bug.

L'utilisateur se log avec son mail et son mot de passe, il arrive sur la première page mais ne peut accéder aux autres pages car il rencontre la page d'erreur.

Voici seule procédure réalisable stable quand on rencontre la page d'erreur que j'ai trouvé :

Vous êtes sur la page d'erreur alors que vous souhaitiez visiter une page :

Cliquez sur le bouton retour de votre navigateur.
Puis appuyez sur la touche F5 de votre clavier.
Acceptez de renvoyer les informations.
Vous devriez pouvoir consulter toutes les pages.

Idem les sessions côté serveur sont ok :
session.cache_expire est à 180 min,
session.cookie_lifetime est à 0 (donc 'infini')
session.gc_maxlifetime est à 1440s.

Le serveur n'est pas plein.
Le serveur ne semble pas endommagé.

La session écrite en php est correctement écrite. En théorie, puisqu'elle a fonctionné 4 ans.

Quelqu'un aurait trouvé ou aurait une piste ?

Merci à tous,
Killian
killian_2008 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/10/2009, 08h42   #5
Nouveau Membre du Club
 
Inscription : juin 2008
Messages : 33
Détails du profil
Informations forums :
Inscription : juin 2008
Messages : 33
Points : 28
Points : 28
Salut kilian,

Je n'sais pas quel version de apache tu utilises, perso a l'epoque ou j'avais ces problemes, nous étions sur easyphp, depuis nous sommes passé sous wamp et ca fonctionne.
Le session_cache_expire fonctionne désormais correctement, je pense à un problème dans easyphp mais je n'peux pas l'assurer à 100 %.
Cependant avec les memes fichier de config, cela marche désormais sur wamp mais easyphp lui est dans les choux, je n'voies que ca qui pourrait en etre une des raisons.

Cdt
tMSun est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/10/2009, 11h30   #6
Invité régulier
 
Inscription : janvier 2008
Messages : 7
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 7
Points : 5
Points : 5
Je te remercie pour ta réponse, toute aide est la bienvenue car mon problème est carrément sur le serveur de prod.

Voici la version d'Apache : Apache/2.2.3 (Debian) PHP/4.4.4-8+etch6

Le code d'authentification est assez simple et ne semble pas poser de problème en lui même :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
 
<?php
session_start();
$validation=0;
 
if(isset($_POST['email']) && isset($_POST['motdepasse'])){
  $_SESSION['email'] = $_POST['email'];
  $_SESSION['motdepasse'] = $_POST['motdepasse'];
  $sql="select USER_ID,EMAIL,MOTDEPASSE from S_USER where EMAIL='".$_SESSION['email']."' and MOTDEPASSE='".AddSlashes($_SESSION['motdepasse'])."' and ACTIF=1";
  $result = mysql_query($sql,$db);
  if ($myrow = mysql_fetch_array($result))
  {
    $validation=1;
    $user_id=$myrow['USER_ID'];
    $_SESSION['user_id']=$myrow['USER_ID'];
  }
} else {
  if(isset($_SESSION['email']) && isset($_SESSION['motdepasse']) && isset($_SESSION['user_id'])){
    $sql="select USER_ID,EMAIL,MOTDEPASSE from S_USER where EMAIL='".$_SESSION['email']."' and MOTDEPASSE='".AddSlashes($_SESSION['motdepasse'])."' and ACTIF=1";
    $result = mysql_query($sql,$db);
    if ($myrow = mysql_fetch_array($result))
    {
      $validation=1;
      $user_id=$myrow['USER_ID'];
    }
  }
}
if ($validation==0){
  echo "Message d'erreur";
  exit;
}
?>

Le problème que j'évoque apparait après une migration des fichiers sur un autre nom de domaine (extension .net => .com) mais sur le même serveur.

Une redirection web du .net est effective vers le .com

Voili voilou...
killian_2008 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/10/2009, 01h22   #7
Nouveau Membre du Club
 
Inscription : décembre 2008
Messages : 90
Détails du profil
Informations forums :
Inscription : décembre 2008
Messages : 90
Points : 33
Points : 33
Par défaut Pareil

Je rencontre a peu près le même problème chez free, j'ai pourtant d'autres sites mais là ma session change de valeur mystérieusement et surtout elle prend la valeur d'une chose que je passe j'ai détecté dans quel fichier le problème était (ce n'était pas ce fichier)


Problème réglé :

J'utilisait :
Code :
1
2
3
4
 
if (isset($_SESSION['num']))
{
$chatakeur=$_SESSION['num'];
et apres j'avais :
Code :
1
2
 
$num=$_POST['numchatak'];
donc il y avait confusion entre $num et $_SESSION['num']
anat1212 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/10/2009, 01h41   #8
Nouveau Membre du Club
 
Inscription : décembre 2008
Messages : 90
Détails du profil
Informations forums :
Inscription : décembre 2008
Messages : 90
Points : 33
Points : 33
Citation:
Envoyé par killian_2008 Voir le message
Je te remercie pour ta réponse, toute aide est la bienvenue car mon problème est carrément sur le serveur de prod.

Voici la version d'Apache : Apache/2.2.3 (Debian) PHP/4.4.4-8+etch6

Le code d'authentification est assez simple et ne pas poser de problème en lui même :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
 
<?php
session_start();
$validation=0;
 
if(isset($_POST['email']) && isset($_POST['motdepasse'])){
  $_SESSION['email'] = $_POST['email'];
  $_SESSION['motdepasse'] = $_POST['motdepasse'];
  $sql="select USER_ID,EMAIL,MOTDEPASSE from S_USER where EMAIL='".$_SESSION['email']."' and MOTDEPASSE='".AddSlashes($_SESSION['motdepasse'])."' and ACTIF=1";
  $result = mysql_query($sql,$db);
  if ($myrow = mysql_fetch_array($result))
  {
    $validation=1;
    $user_id=$myrow['USER_ID'];
    $_SESSION['user_id']=$myrow['USER_ID'];
  }
} else {
  if(isset($_SESSION['email']) && isset($_SESSION['motdepasse']) && isset($_SESSION['user_id'])){
    $sql="select USER_ID,EMAIL,MOTDEPASSE from S_USER where EMAIL='".$_SESSION['email']."' and MOTDEPASSE='".AddSlashes($_SESSION['motdepasse'])."' and ACTIF=1";
    $result = mysql_query($sql,$db);
    if ($myrow = mysql_fetch_array($result))
    {
      $validation=1;
      $user_id=$myrow['USER_ID'];
    }
  }
}
if ($validation==0){
  echo "Message d'erreur";
  exit;
}
?>

Le problème que j'évoque apparait après une migration des fichiers sur un autre nom de domaine (extension .net => .com) mais sur le même serveur.

Une redirection web du .net est effective vers le .com

Voili voilou...
On voit bien que tu dois avoir mon problème
doit y'avoir confusion entre $_SESSION['email'] et $_POST['email']
anat1212 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/10/2009, 03h06   #9
Invité régulier
 
Inscription : janvier 2008
Messages : 7
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 7
Points : 5
Points : 5
Par défaut PHPSESSID

Je te remercie je vais voir si ça règle le problème et te tiens au courant.

Ce qui se passe c'est que ce code fonctionnait avant la migration.
Ce qu'on peut juste constater, c'est que le PHPSESSID ne s'implémente pas lors de la connexion.
C'est seulement après renvoi des paramètres que le PHPSESSID s'initialise en cookie.

Certains développeurs pensent qu'il peut s'agir d'un problème de disque. Certains administrateurs de serveurs pensent qu'il s'agit d'un problème de script.

J'ai testé cette variante de script : aucun résultat.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
 
<?php
session_start();
$validation=0;
 
if(isset($_POST['email']) && isset($_POST['motdepasse'])){
  $sql="select USER_ID,EMAIL,MOTDEPASSE from S_USER where EMAIL='".$_POST['email']."' and MOTDEPASSE='".addslashes($_POST['motdepasse'])."' and ACTIF=1";
  $result = mysql_query($sql,$db);
  if ($myrow = mysql_fetch_array($result)) {
    $validation=1;
 
	$_SESSION['email'] = $myrow['EMAIL'];
	$_SESSION['motdepasse'] = $myrow['MOTDEPASSE'];
    $_SESSION['user_id'] = $myrow['USER_ID'];
 
	header('Location:?PHPSESSID=' . session_id());
  }
} 
else if(isset($_SESSION['email']) && isset($_SESSION['motdepasse']) && isset($_SESSION['user_id'])){
	$validation = 1;
	$user_id = $_SESSION['user_id'];
}
 
//---------- a enlever si tout va bien
echo '<!--';
var_dump($_POST);
var_dump($_SESSION);
var_dump($_COOKIE);
echo '-->';
//----------
 
if ($validation==0){
  echo "Message d'erreur";
  exit;
}
?>
killian_2008 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/10/2009, 03h24   #10
Invité régulier
 
Inscription : janvier 2008
Messages : 7
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 7
Points : 5
Points : 5
Par défaut Autres pistes trouvées sur le web

J'ajoute ici des pistes trouvées ici et là sur le web :

Utiliser session_write_close() avant la redirection
ou
setcookie(), si vous ne voulez pas rencontrer de message d'erreur.
ou
deux session_start s'annulent parfois
ou
setcookie('PHPSESSID',session_id())
killian_2008 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/10/2009, 08h29   #11
Invité régulier
 
Inscription : janvier 2008
Messages : 7
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 7
Points : 5
Points : 5
Par défaut Solution intermédiaire

Pour ceux qui rencontrerais le problème :

Modifier le php.ini Mettre session.auto_start sur on (fichier modifiable via ssh avec putty par exemple) Redémarrer apache

Le PHPSESSID s'initialise dés que l'utilisateur arrive sur le site. Ce qui permet lors de son login de recevoir les paramètres (variables).

Je pense que ce n'est pas la solution idéale mais sur un site en production j'aurais préféré avoir ce conseil pour l'appliquer immédiatement.

Donc maintenant l'info existe.

J'ai cru constater que l'heure de modification des logs de session était +1h d'où est ce que ça peut venir ce problème ?

Avis aux amateurs...
killian_2008 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 20h46.


 
 
 
 
Partenaires

Hébergement Web