2009-05-06 6 views
4

J'essaie d'obtenir mon script pour utiliser l'ID de session URL au lieu de cookies. La page suivante ne prend pas la variable dans l'URL comme identifiant de session. Je dois manquer quelque chose.passer l'ID de la session via l'URL

Première page http://www.website.com/start.php

ini_set("session.use_cookies",0); 
ini_set("session.use_trans_sid",1); 
session_start(); 
$session_id = session_id(); 
header("location: target.php?session_id=". $session_id); 

page suivante - http://www.website.com/target.php?session_id=rj3ids98dhpa0mcf3jc89mq1t0

ini_set("session.use_cookies",0); 
ini_set("session.use_trans_sid",1); 
print_r($_SESSION); 
print(session_id()) 

Résultat est un identifiant de session différente et la session est vide.

Array ([debug] => non) pt1t38347bs6jc9ruv2ecpv7o2

+0

Utilisez-vous un framework PHP de quelque sorte? Stock PHP n'interprète pas automatiquement quoi que ce soit dans la chaîne de requête, donc il n'y a pas de lien implicite entre $ _SESSION et $ _GET ['session_id']. – johnvey

+7

Gardez à l'esprit que mettre l'ID de session dans l'url peut signifier qu'il sera divulgué via des référents HTTP ... – bdonlan

+1

Nous avons notre propre serveur Apache dédié avec php. Ce n'est pas partagé. Est-ce que ce sera un risque pour la sécurité? –

Répondre

3

Il semble que vous avez juste besoin d'appeler session_start() sur la deuxième page.

De la documentation:

session_start() crée une session ou reprend celui en cours en fonction de l'identifiant de session courant qui est en cours transmis par une demande, comme GET, POST, ou un cookie.

EDIT:

Cela dit, vous pouvez aussi saisir manuellement essayer l'identifiant de session de la chaîne de requête. Sur la deuxième page que vous devez faire quelque chose comme:

ini_set("session.use_cookies",0); 
ini_set("session.use_trans_sid",1); 
session_id($_GET['session_id']); 
print_r($_SESSION); 
print(session_id()); 

Notez que la fonction session_id() définira l'id si vous passez l'identifiant comme paramètre.

+0

Merci. Cela a fait l'affaire. –

+0

Votre première réponse avant de l'éditer a aidé le plus. L'identifiant session_id ($ _ GET ['session_id']); fait la différence. –

+0

Puis je vais l'éditer dans :) –

4

soyez prudent lorsque vous utilisez l'URL pour transmettre des identifiants de session, ce qui pourrait entraîner un piratage de session via le referer!

+0

comment est-ce possible – YdB

+0

@bboni en théorie: les navigateurs ajoutent l'URL de la page dont le lien provient de l'en-tête (le "referer"). si l'identifiant de session est un paramètre d'URL, la page liée est maintenant capable de détourner la session. Je ne sais pas quelles sauvegardes supplémentaires php employé contre cela, mais il est généralement considéré comme dangereux. – stefs

1

Ma question était l'utilisation de Flash dans FF (comme Piggy Backs flash IE, si les sessions ne sont pas partagées entre l'objet flash et firefox)

utilisant php 5.3 toutes ces réponses ont souligné la vérité. Ce que j'ai finalement trouvé à travailler était plutôt simple ... passez l'identifiant dans la chaîne de requête. Réglez. PUIS commencer la session.

session_id($_GET['PHPSESSID']); 
session_start(); 
2

Au lieu de hardcoding 'PHPSESSID', utilisez ceci:

session_id($_GET[session_name()]); 
+0

Vous aurez toujours besoin de connaître le nom de la session pour pouvoir le passer en paramètre GET, mais c'est un bon moyen si vous définissez dynamiquement le nom de la session via une variable. –

Questions connexes