Problème $_SESSION avec IE et pas aevc Firefox

Ric
Invité n'ayant pas de compte PHPfrance

31 août 2005, 17:00

Bonjour,

J'ai un problème avec la variable $_SESSION depuis un moement, et je n'arrive pas a le resoudre ... tout se passe correctement avec le browser FireFox, mais le script ne fonctionne pas avec IE!

Je récapitule:

* sur une page login.php3 j'authentifie l'utilisateur, puis j'enregistre son pseudo dans $_SESSION['id']=$pseudo (avec session_start() en tout debut de fichier)

* en fin de fichier, je redirige vers ma page d'index : header("location:$url")

* sur ma page d'index, je vérifie que l'utilisateur s'est identifié avec if(isset($_SESSION['id'])) , sinon, je renvoi vers ma page de saisi de pseudo/passwd

Rien n'y fait! je retombe toujours sur ma page de saisi avec Internet Explorer, alors qu'il n'y a aucun soucis avec Firefox!

J'ai fait un test avec le scipt suivant :

*****

<?php
// page1.php

session_start();

echo 'Bienvenue à la page numéro 1';

$_SESSION['favcolor'] = 'vert';
$_SESSION['animal'] = 'chat';
$_SESSION['time'] = time();

// Fonctionne si le cookie a été accepté
echo '<br /><a href="page2.php3">page 2</a>';

// Ou bien, en indiquant explicitement l'identfiant de session
echo '<br /><a href="page2.php3?' . SID . '">page 2</a>';
?>

*****

<?php
// page2.php

session_start();

echo 'Bienvenue sur la page numéro 2<br />';

echo $_SESSION['favcolor']; // vert
echo $_SESSION['animal']; // chat
echo date('Y m d H:i:s', $_SESSION['time']);

// Vous pourriez utiliser la constante SID ici, tout comme dans la page page1.php
echo '<br /><a href="page1.php">page 1</a>';
?>

*****

Voici le resultat avec IE:

* en cliquant sur le lien 'page2' via <a href="page2.php3">page 2</a>:

"Bienvenue sur la page numéro 2
1970 01 01 01:00:00"

* en cliquant sur le lien via <a href="page2.php3?' . SID . '">page 2</a>

"Bienvenue sur la page numéro 2
vertchat2005 08 31 09:06:28"

-------------------------------

J'ai besoin d'avoir constament $_SESSION['id'], puisque selon l'identifiant, je n'affiche pas la même chose

Ce que je ne pige pas c'est que IE n'accepte pas le cookie, quel que soit son niveau de confidentialité ...

Je ne veux pas passer le SID a chaque page, et je voudrais surtout comprendre ce que je ne fais pas bien. Je suis desespéré je n'arrete pas de chercher l'explication de ce mystère, mais je ne trouve pas.

J'espère que vous pourrez m'aider, qu'il ne s'agit que d'une erreur 'bateau'
, rapidement corrigée, que le débutant que je suis n'a pas vu!

merci d'avance pour votre aide

zzzzzZZZZZ
Invité n'ayant pas de compte PHPfrance

31 août 2005, 17:24

tu parles de cookie....
lorsque tu utilise setcookie (que je ne vois pas) precise le dernier argument qui represente le domaine dans lequel le cookie sera existant.
pour ma part j'ai eu des soucis avec cela

Ric
Invité n'ayant pas de compte PHPfrance

31 août 2005, 17:57

Non, c'est une erreur, je n'utilise pas de cookie (ou alors inconciement :? :lol: )

Apparement, la variable est perdue lors du passage de login.php3 à index.php3 ...

si je fais un var_dump($_SESSION) en fin de fichier login.php3, j'obtiens array(1) { ["id"]=> string(5) "toto" } , si "toto" est mon pseudo ... parfait.

par contre si je fais un var_dump($_SESSION) en debut de fichier index.php3, j' obtiens array(0) { } :? :? :?

Le même test avec Firefox me donne array(1) { ["id"]=> string(5) "toto" } dans les deux cas ... à y perdre mon latin


Merci quand même

Eléphant du PHP | 185 Messages

31 août 2005, 18:38

Cela depend de la version de PHP, mais par défault en PHP4, les cookies essaerons d'être utilisé siils sont activé. Sinon, il y a apparition d'un SID=[a-f0-9]{32} dans l'url.

Ric
Invité n'ayant pas de compte PHPfrance

01 sept. 2005, 09:22

Bonjour,

Je ne vois pas de SID ... dans l'url.

Si ça peut vouas aider j'ai refait un test avec encore moins de code :lol:
<?php
// test1.php
session_start();
$_SESSION['test'] = 'youpi';
header("location:test2.php");
?>
<?php
// test2.php
session_start();
echo $_SESSION['test'];
echo var_dump($_SESSION);
?>
Et maintenant, le clou du spectacle:

Sous IE: array(0) { }
Sous Firefox: array(1) { ["test"]=> &string(5) "youpi" }

Je suis desespéré, je ne sais plus quoi faire et je ne comprends pas ce qu'il se passe ... une âme charitable pour m'aider ?? :roll:

merci et @+

zzzzzZZZZZ
Invité n'ayant pas de compte PHPfrance

01 sept. 2005, 14:28

j'ai tester ton code simplifier...
chez moi ca marche sur firework et IE

zzzzZZZ
Invité n'ayant pas de compte PHPfrance

01 sept. 2005, 14:29

[edit] firefox pas firework :oops:

Ric
Invité n'ayant pas de compte PHPfrance

01 sept. 2005, 15:21

Bah ça c'est une info interessante ... :idea:
tu as quelle version de IE?

zzzzzZZZZ
Invité n'ayant pas de compte PHPfrance

01 sept. 2005, 15:53

v6

Mammouth du PHP | 543 Messages

01 sept. 2005, 16:00

Donne nous les 3 variables suivantes de la config apache :

session.use_trans_id
session.use_cookie
session.use_only_cookie

@+

Ric
Invité n'ayant pas de compte PHPfrance

01 sept. 2005, 17:45

Voici les valeurs (local/master value):

session.use_trans_sid : 0 0
session.use_cookies On On
session.use_only_cookies Off Off

Eléphant du PHP | 185 Messages

01 sept. 2005, 18:18

Essaye avec session.use_trans_sid à 1:

ini_set('session.use_trans_sid', 1); // au début du script

Ric
Invité n'ayant pas de compte PHPfrance

02 sept. 2005, 09:08

ini_set() est inactive pour des raisons de sécurité, impossible de l'activier sur les serveurs (Club-Internet :lol: )

:? :? :?

Ric
Invité n'ayant pas de compte PHPfrance

02 sept. 2005, 11:25

au fait, comment passer le SID dans une url de ce genre:

echo "<a href=\"index.php3?page=galeries&categories=$valeur&$kdLink\">";

si je ne peux pas faire autrement ?

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

02 sept. 2005, 14:28

2 raisons possible :
- IE est configuré, chez toi, pour interdire les coockies. Dans certains cas, PHP n'envoi pas automatiquement le SID
- IE, dans la v6, met en place une gestion des cookies strict afin de proteger la vie privée. Pour contourner ces problèmes, il faut déclarer une charte P3P. Je te laisse chercher quelques liens sur cette norme :wink:
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer