[PHP]$_SESSION qui disparaissent sous IE

$_SESSION qui disparaissent sous IE [PHP] - PHP - Programmation

Marsh Posté le 09-07-2012 à 13:00:30    

Bonjour à tous.
 
voilà, je suis en train de faire un site avec du PHP et des sessions utilisateurs.
 
J'ai donc mis mon session_start(); en début de chaque page.
 
Ca passe très bien avec firefox. Mais avec IE... aie aie aie (comme d'hab !). Les variables de session disparaissent. Pas toujours sur la même page, ça arrive aléatoirement.
 
 [:fegafobobos:2]  
 
Voilà. Si quelqu'un a des infos, je prends.
 
Merci

Reply

Marsh Posté le 09-07-2012 à 13:00:30   

Reply

Marsh Posté le 09-07-2012 à 17:29:02    

Ca ne viendrait pas du mode de navigation "privée" par hasard?


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 09-07-2012 à 18:28:41    

non, j'en ai pas l'impression...
Et ce que ça viendrait pas de mon serveur ?
J'ai installé XAMPP dans sa dernière version sur un Windows 2008R2. Y a pas une option quelque part ?

Reply

Marsh Posté le 09-07-2012 à 21:26:53    

Commence par bien identifier ton problème.
Es-tu sûr que tout passe pour le mieux avec Firefox ? As-tu testé avec d'autres navigateurs ? Est-ce que le « bogue » est reproductible ou est-il totalement aléatoire ?
Quelle est ta version d'IE ?
Tu te connectes sur un site distant ou tu es en local ?
 
Pour vérifier, je te conseil de créer des pages extrêmement simples :
— Dans un fichier init.php :

Code :
  1. session_start();
  2. $_SESSION['test'] = 'Session OK';


 
— Dans un fichier test.php :

Code :
  1. session_start();
  2. echo (isset($_SESSION['test'])) ? $_SESSION['test'] : 'Session lost...';


 
Va sur init.php, puis recharge ta page test.php plein de fois. Ré-itère l'opération sur IE, FF et un autre navigateur. Déjà, tu identifieras s'il s'agit d'un « bogue » Apache où d'une erreur de code.

Reply

Marsh Posté le 10-07-2012 à 00:23:15    

Salut.
Merci pour tes conseils.
 
J'ai testé avec FF et Chrome, c'est bon. Aucun souci.
 
Le bug est aléatoire, mais il intervient entre 5 et 10 clics de navigation. Une fois que j'ai perdu la session, je peux rien faire. F5 ne m'aide pas, je suis obligé de quitter le site et de me logger à nouveau.
 
Je testerai ton bout de code demain.
 
Merci, a+ !

Reply

Marsh Posté le 10-07-2012 à 08:38:16    

Question bête : tes sessions, tu les gères avec le système natif de php? T'en aurais pas implémenté un dans une BD ou un système de fichier?


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 10-07-2012 à 12:06:34    

rufo a écrit :

T'en aurais pas implémenté un dans une BD ou un système de fichier?


 
Euh... Je crois pas, vu que je sais pas de quoi tu parles ^^
 
En gros, à la connexion, php va chercher les infos de l'utilisateurs dans une base de données, et les variables de session récupèrent ces données.
 
J'ai, en gros les  variables
 
$_SESSION['id']
$_SESSION['niveau']
$_SESSION['login']
$_SESSION['entreprise']
 
Il m'arrive parfois de créer des variables $entreprise je ne sais pas si ça joue.
 
a+

Reply

Marsh Posté le 10-07-2012 à 12:25:50    

Archaygo a écrit :


Pour vérifier, je te conseil de créer des pages extrêmement simples :
— Dans un fichier init.php :

Code :
  1. session_start();
  2. $_SESSION['test'] = 'Session OK';


 
— Dans un fichier test.php :

Code :
  1. session_start();
  2. echo (isset($_SESSION['test'])) ? $_SESSION['test'] : 'Session lost...';


 
Va sur init.php, puis recharge ta page test.php plein de fois. Ré-itère l'opération sur IE, FF et un autre navigateur. Déjà, tu identifieras s'il s'agit d'un « bogue » Apache où d'une erreur de code.


 
Bon, ben visiblement, je perds pas la session en faisant ça.
 
Y'aurait un problème dans mon code oO

Reply

Marsh Posté le 10-07-2012 à 14:48:53    

Probable.
 
C'est le moment où tu dois éditer le fichier test.php, en te rapprochant de plus en plus de ton/tes fichier(s) PHP qui te font perdre la session. N'oublie pas de tester souvent, pour réussir à isoler la partie de code qui est à l'origine de ton problème.
 
Ceci peut être assez long, mais c'est aussi infaillible ;)
 
Sinon, tu peux poster ton code ici, mais je ne suis pas certain de pouvoir identifier d'un seul coup d'oeil un problème comme le tiens.
 
EDIT : Ah j'oubliais, essaie le test précédent avec des tempos différents : ne te contente pas de recharger la page toutes les 5 secondes pendant un minutes, fais-le après 15s, 30s, 1min, 2min pour t'assurer que ton PHP n'a pas de problème. Vérifie aussi la valeur de session.gc_maxlifetime dans ton php.ini, il correspond à peu près au temps de vie des sessions, en seconde. Par défaut, c'est 1440 je crois.


Message édité par Archaygo le 10-07-2012 à 15:05:32
Reply

Marsh Posté le 10-07-2012 à 16:25:32    

Ah, intéressant à savoir.
Bon, en général, ça coupe au bout de quelques secondes. 5 minutes au max.
Ca peut intervenir sur n'importe quelle page, donc, je sais absolument pas quoi chercher dans mon code.
 
Aie aie aie. Ca sent la galère.

Reply

Marsh Posté le 10-07-2012 à 16:25:32   

Reply

Marsh Posté le 10-07-2012 à 17:01:34    

En solution de rechange, utilises les cookies.

Reply

Marsh Posté le 10-07-2012 à 17:12:46    

Ça dépend de l'utilisation, les cookies étant côté client sont moins sécurisés que la variable $_SESSION.
Tu peux utiliser un cookie pour garder en mémoire un panier sur un site de vente, mais pas par exemple pour gérer le compte d'un utilisateur.

Reply

Marsh Posté le 10-07-2012 à 17:37:16    

La plupart des sites web (dont Google & co) utilisent, entre autres, les cookies pour la gestion des authentifications utilisateur (option "se souvenir de moi" ).
 
Tu peux coupler ça avec une vérification d'adresse IP et limiter la durée de vie du cookie pour coller à celle d'une session, pour plus de sécurité. Mais je parle bien de solution de rechange, mieux vaut utiliser une session comme l'indique Flow789.


Message édité par Archaygo le 10-07-2012 à 17:39:43
Reply

Marsh Posté le 10-07-2012 à 17:41:57    

Ouais, au pire.
 
Sinon, je marque en page d'accueil qu'il faut pas utiliser IE ^^
 
Bon, je vais continuer à chercher.
Au pire, je ferai avec les cookies, mais je dois revoir tout mon code :-/ avec mes 50 pages...
 
Si vous avez une autre solution, je prends.
 
Merci en tout cas

Reply

Marsh Posté le 10-07-2012 à 18:18:43    

Je dois t'avouer que ça ne m'est jamais arrivé. Ca doit forcément venir d'un problème dans ton code, ce qui m'embête c'est ce côté aléatoire qui ne permet pas de deviner facilement d'où ça vient.
Je verrais bien une merde comme une variable de session réinitialisée à un moment du code, mais ce serait étonnant que seul IE y soit sensible.
 
Je ne vois pas top d'autre solution que de reprendre intégralement le code comme te l'a expliqué Archaygo.

Reply

Marsh Posté le 10-07-2012 à 19:21:01    

M'ouais...
 
Bon, je vous tiens au courant.

Reply

Marsh Posté le 10-07-2012 à 23:08:15    

register_globals est à off dans ton php.ini?


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 11-07-2012 à 00:30:22    

je te dis ça demain. bonne nuit/soirée.

Reply

Marsh Posté le 11-07-2012 à 12:40:24    

Bon, il est bien à off.
 
J'ai aussi vu :
session.auto_start = 0
session.cookie_lifetime = 0
session.gc_maxlifetime = 1440
session.cache_expire = 180
 
je ne sais pas à quoi correspond session.gc_probability = 1
 
Voilà en gros tout ce que j'ai trouvé qui pourrait concerner mes sessions. Les valeurs sont toutes celles par défaut dans mon php.ini.

Reply

Marsh Posté le 11-07-2012 à 15:59:13    

Cela ne viendrait il pas de tes paramètres de cookies ?


---------------
http://www.aideinfo.com/  Whois adresses IP/domaines le plus évolué !!  FAQ Free Mobile
Reply

Marsh Posté le 11-07-2012 à 19:36:58    

Lesquels par exemple ?
 
Au passage : Le problème ne survient pas que avec mon PC. Je l'ai fait avec 3 PC différents qui n'ont rien à voir entre eux.
 
a+

Reply

Marsh Posté le 12-07-2012 à 10:59:01    

Déjà vérifie que les cookies sont acceptés par défaut. Abaisse éventuelement le niveau de confidentialité. Si un cookie est bloqué, tu dois avoir dans la barre d'état un oeil avec un cercle rouge barré.


---------------
http://www.aideinfo.com/  Whois adresses IP/domaines le plus évolué !!  FAQ Free Mobile
Reply

Marsh Posté le 12-07-2012 à 12:14:48    

ok, je vais regarder. Merci.

Reply

Marsh Posté le 14-07-2012 à 14:25:28    

ajax ?

Reply

Marsh Posté le 14-07-2012 à 14:44:33    

non, pas d'ajax.

Reply

Marsh Posté le 16-07-2012 à 19:23:16    

dites, il y a des pages où, en fonction de ce qui a été choisi dans le formulaires, je fais :

 
Citation :


if(condition)
{
header('Location: ./calcul.php?page=prixvente&action=tempsform');  
exit("Chargement en cours..." );
}

 

ce header pourrait perturber le session_start() ? ou le exit peut être ?

 

Et ça fait quoi si je mets 2 session_start(); sur la même page ?

 

a+

 

edit : non, c'est pas ça, je viens de tester. J'arrive pas à reproduire le bug à volonté. C'est complètement aléatoire !


Message édité par brutax le 16-07-2012 à 19:28:22
Reply

Marsh Posté le 16-07-2012 à 19:43:42    

[:cheesecake]

Reply

Marsh Posté le 17-07-2012 à 11:21:25    

2 session_start() pas de pb
Si une session est déjà ouverte la 2e est ignorée

Reply

Marsh Posté le 17-07-2012 à 11:22:16    

J'ai eu le même pb aléatoire c'était à cause d'ajax
Je touchais aux sessions sans attendre le callback

Reply

Marsh Posté le 17-07-2012 à 19:05:56    

Bon, petit diagnostic :
En fait, j'ai fait des calculs qui s'appuient sur des valeurs saisies.
Il y a 3 types de calculs, tous accessibles depuis n'importe quelle page.

 

Quand on arrive sur la page d'accueil d'un calcul, tous les cookies sont supprimées. Par exemple, avec setcookie('moncookie');

 

L'utilisateur passe de page en pages et de formulaires en formulaires. Les valeurs ainsi saisies sont stockées dans des cookies. A la fin, les cookies sont traités.

 

Lorsque j'arrive à la fin du type de calcul "rentabilité" (./calcul.php?page=rentabilite&action=resultat) si je vais sur la page d'accueil d'un autre calcul (./calcul.php?page=hprod), à ce moment-là, je perd ma session. J'ai fait le test 2 fois et ça ne rate pas.

 

Une idée ?

 

edit : fail. en fait c'est pas systématique T_T Je viens de tester à nouveau et ça plante pas au même moment.
edit 2 : mais en fait, il semblerait qu'il y ait un lien avec les pages où je supprime mes cookies...


Message édité par brutax le 17-07-2012 à 19:09:34
Reply

Marsh Posté le 20-07-2012 à 12:27:51    

merci jai des meme souci que vous


---------------
http://monpub.com
Reply

Marsh Posté le 21-07-2012 à 17:27:35    

Toujours mes variables de sessions qui disparaissent sous IE. Ca vient aussi de me le faire sur FF pour la première fois.
 
j'ai essayé de remplacer

Code :
  1. setcookie('cookie_form[totalvp]');


 
par

Code :
  1. setcookie('cookie_form[totalvp']','',0,'/','',0);


 
c'est pas mieux.
 
J'arrive pas à savoir d'où ça vient !
 
Est-ce que ça vient de l'initialisation des cookies ?
Peu probable.
 
Est-ce que ça vient d'un manque de session_start(); ?
Possible, mais il est écrit en première ligne de la page dans laquelle toutes les autres sont incluses.

Code :
  1. <?php
  2. session_start();
  3. include("blabla.php" );
  4. include("scripts.php" );
  5. ?>


 
Est-ce que ça viendrait pas de ma structure à base de switch case ? et/ou des calculs pour les valeurs des cookies ?

Code :
  1. switch ($page) {
  2. case "action" :
  3. setcookie('cookie_charges[fpedago]', $_POST['fpedago'], (time() + 14400));
  4. setcookie('cookie_charges[sstrait]', $_POST['sstrait'], (time() + 14400));
  5. setcookie('cookie_charges[honoraires]', $_POST['honoraires'], (time() + 14400));
  6. setcookie('cookie_charges[locationext]', $_POST['locationext'], (time() + 14400));
  7. break;
  8. case "charges" :
  9. setcookie('cookie_form[faf'.$i.']', $_POST['faf'.$i], (time() + 14400));
  10. setcookie('cookie_form[prepa'.$i.']', round(($_POST['faf'.$i]/(1-($_POST['tx_prepa'.$i]/100)))-$_POST['faf'.$i], 2), (time() + 14400));
  11. setcookie('cookie_form[ac'.$i.']', $_POST['ac'.$i], (time() + 14400));
  12. setcookie('cookie_form[cht'.$i.']', $_POST['cht'.$i], (time() + 14400));
  13. setcookie('cookie_form[lecout'.$i.']', str_replace(" ", "", $_POST['lecout'.$i]), (time() + 14400));
  14. setcookie('cookie_form[tx_prepa'.$i.']', $_POST['tx_prepa'.$i], (time() + 14400));
  15. break;
  16. default;
  17. //et là on supprime tous les cookies du dessus
  18. }


 
Je patauge, je patauge.
Ca vient même de me le faire pour la première fois avec firefox.
 
Y'a pas une commande pour dire "supprimer tous les cookies" ? Au moins, ça me permettrai d'écarter la théorie du cookie...
Sinon je fais un cookie pour remplacer les variables de session. Mais ça fait chier...

Reply

Marsh Posté le 22-07-2012 à 11:25:07    

Question qui n'a peut-etre aucun rapport, mais quel est l'encodage de tes fichiers ? (je parle bien des fichiers, pas d'une balise meta)
Je pense à l'utf-8 et le byte of mark.


Message édité par NewsletTux le 22-07-2012 à 11:25:30

---------------
NewsletTux - outil de mailing list en PHP MySQL
Reply

Marsh Posté le 22-07-2012 à 12:20:35    

Comment je peux voir ça ?
P.S/ j'utilise notepad++

Reply

Marsh Posté le 23-07-2012 à 09:05:12    

tiens, apparemment là tu peux trouver une piste : http://forum.alsacreations.com/top [...] ingue.html


---------------
NewsletTux - outil de mailing list en PHP MySQL
Reply

Marsh Posté le 23-07-2012 à 09:34:08    

intéressant. Je testerai.
Merci

Reply

Marsh Posté le 24-07-2012 à 20:36:38    

Bon, j'ai essayé ça :
http://blog.unesourisetmoi.info/?a [...] erveur-ovh  
c'est pas mieux.
 
Je vais essayer ton truc NewsletTux, je te tiens au jus.
 
Je suis toujours ouvert à toute proposition.

Reply

Marsh Posté le 28-07-2012 à 13:35:13    

J'ai essayé de remplacer les variables de session par des cookies.

 

Le problème persiste, et uniquement sous IE.

 

En fait, j'ai l'impression que quand ça lui pète, il supprime toutes les variables de sessions et les cookies.

 

Par exemple, pour la variable $_COOKIE['niveau'], j'ai
Notice: Undefined index: niveau in C:\xampp\htdocs\logb\calcul\rentabilite.php on line 2

 

Même chose si je mets $_SESSION['niveau'] à la place du cookie (sachant que j'ai initialisé mes sessions, mes variables et tout avant).

 

Quelle est la bonne syntaxe pour supprimer un cookie sous IE ?

 

Merci


Message édité par brutax le 28-07-2012 à 13:48:49
Reply

Marsh Posté le 31-07-2012 à 08:20:59    

c'est ton IE qui est completement fucké, fait une remise à zero de tous ses paramètres, il y a une option dans IE pour ça


---------------
Blablaté par Harko
Reply

Marsh Posté le 31-07-2012 à 13:35:22    

Ben, le problème, c'est que ça le fait pas qu'avec le mien.
J'ai essayé avec 3 PC différents, et avec des IE 8 et 9.

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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