2010-04-15 10 views
0

J'essaie d'utiliser la session PHP sans utiliser de cookies. J'ai activé session.use_trans_sid et désactivé session.use_cookies dans mon fichier php.ini. J'ai également désactivé les cookies dans mon navigateur Firefox. Maintenant, lorsque je navigue entre les pages, je suis incapable d'accéder à la variable dans le jeu d'objets de session d'une page précédente. BTW, je suis conscient que l'utilisation des identifiants de session dans le cadre de l'URL n'est pas une approche recommandée.Impossible d'accéder à la variable de session sur le cookie moins les sessions PHP

J'ai fourni l'exemple de code ci-dessous pour les deux pages - page1.php et page2.php. Page1.php définit une variable dans l'objet de session sur true et page2.php vérifie la valeur de cette variable et prend des mesures en conséquence.

page1.php

<?php 
session_start(); 
if (isset($_REQUEST["user"])) 
{ 
    $_SESSION["name"] = true; 
    $host = $_SERVER["HTTP_HOST"]; 
    $path = dirname($_SERVER["PHP_SELF"]); 
    header("Location: http://$host$path/page2.php"); 
    exit; 
} 
?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> 
<head> 
<title>Page1</title> 
</head> 
<body> 
<form method="get" action="/page1.php"> 
Name:<input type="text" name="user"/><br/> 
<input type="submit" value="Login"/><br/> 
</form> 
</body> 
</html> 

page2.php

<?php 
session_start(); 
if ($_SESSION["name"]) 
{ 
    echo("<h1>Name set.</h1>"); 
} 
else 
{ 
    echo("<h1>Name NOT set.</h1>"); 
} 
?> 
+0

Pouvez-vous nous montrer un code de base que vous utilisez? –

+0

La fonctionnalité de session fonctionne-t-elle? Pouvons-nous voir les en-têtes? –

+0

La raison pour laquelle vous voyez 'GET /page1.php?PHPSESSID=v08 ...' est due au 'session_start' qui est déclenché lorsque le formulaire est affiché pour la première fois. Quel est l'en-tête de la deuxième requête? –

Répondre

1

J'ai résolu le problème. On dirait que php ne passera pas l'identifiant de session lors de redirections dans le cadre de l'URL de redirection même si le re-direct est à une page sur le même site. C'est pourquoi la variable de session n'était pas disponible dans page2.php ci-dessus et la sortie était toujours "Nom NON défini". J'ai donc changé mon URL re-directe sur page1.php pour avoir l'ID de session dans le cadre de & qui a fait l'affaire.

$sid = session_name() . "=" . session_id(); 
header("Location: http://$host$path/page2.php?$sid"); 
+0

En mode trans_sid, PHP insère uniquement l'ID de session en HTML (liens et formulaires 'a'). Il ne modifiera pas les javascript, les blocs onclick, les en-têtes(), ni les fichiers liés en externe, tels que les CSS via les en-têtes 'link'. –

Questions connexes