Page 1 sur 2

Problème $_SESSION avec IE et pas aevc Firefox

Posté : 31 août 2005, 17:00
par Ric
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

Posté : 31 août 2005, 17:24
par zzzzzZZZZZ
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

Posté : 31 août 2005, 17:57
par Ric
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

Posté : 31 août 2005, 18:38
par savageman
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.

Posté : 01 sept. 2005, 09:22
par Ric
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 @+

Posté : 01 sept. 2005, 14:28
par zzzzzZZZZZ
j'ai tester ton code simplifier...
chez moi ca marche sur firework et IE

Posté : 01 sept. 2005, 14:29
par zzzzZZZ
[edit] firefox pas firework :oops:

Posté : 01 sept. 2005, 15:21
par Ric
Bah ça c'est une info interessante ... :idea:
tu as quelle version de IE?

Posté : 01 sept. 2005, 15:53
par zzzzzZZZZ
v6

Posté : 01 sept. 2005, 16:00
par raptor
Donne nous les 3 variables suivantes de la config apache :

session.use_trans_id
session.use_cookie
session.use_only_cookie

@+

Posté : 01 sept. 2005, 17:45
par Ric
Voici les valeurs (local/master value):

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

Posté : 01 sept. 2005, 18:18
par savageman
Essaye avec session.use_trans_sid à 1:

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

Posté : 02 sept. 2005, 09:08
par Ric
ini_set() est inactive pour des raisons de sécurité, impossible de l'activier sur les serveurs (Club-Internet :lol: )

:? :? :?

Posté : 02 sept. 2005, 11:25
par Ric
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 ?

Posté : 02 sept. 2005, 14:28
par zeus
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: