2010-09-05 7 views
2

Quelqu'un a-t-il des idées sur la raison pour laquelle cela ne fonctionnerait pas?Forcer l'ID de session de la demande

if(isset($_POST['PHPSESSID'])) { 
session_id($_POST['PHPSESSID']); 
session_start(); 
var_dump($_SESSION); 
} 

Le var_dump ($ _ SESSION); est toujours vide! Il devrait être chargé de choses! Y a-t-il des paramètres qui empêchent de forcer les ID de session? Le démarrage automatique n'est pas activé.

+0

votre vulnérable au piratage de session btw. – RobertPitt

+0

@RobertPitt: S'il vous plaît élaborer – VolkerK

+1

bien si je ai eu mes mains sur un session_id d'un autre membre, je pourrais injecter via POST et utiliser la session d'un autre membre, l'accès aux données que je ne devrais pas être en mesure d'accéder! – RobertPitt

Répondre

1

Le code que vous avez posté est correct. Cependant, vous ne pouvez pas être voir des variables dans votre session pour une de plusieurs raisons:

  • $_POST['PHPSESSID'] est pas défini
  • $_POST['PHPSESSID'] contient des caractères non numériques
  • $_POST['PHPSESSID'] ne se réfère pas à une session de population ID
  • session_start() a été appelé avant votre appel à session_id

Si aucun de ces cas, je ne sais pas quel est le problème, mais pourquoi ne pas essayer d'utiliser session_name() (qui a été conçu pour ce que vous essayez de faire) au lieu de session_id?

+0

Merci. La variable est définie, car le var_dump dans le bloc if (isset()) est en train de se produire, donc je sais que c'est vrai. Par "non numérique" vouliez-vous dire "non-alphanumérique"? Pouvez-vous expliquer comment faire cela avec session_name()? –

+0

http://php.net/manual/fr/function.session-name.php – RobertPitt

+0

Ma compréhension, confirmée par le lien, est que session_name() est le nom du cookie de session, mais session_id() est la valeur unique .J'ai confirmé que la valeur de session_name() est "PHPSESSID" (la valeur par défaut), donc si elle est codée en dur ou récupérée avec cette fonction, je ne vois pas comment cela ferait une différence. –

0

Votre $_POST['PHPSESSID'] doit se tromper:

Selon le gestionnaire de session, tous les caractères sont autorisés dans l'identifiant de session. Par exemple, le gestionnaire de session de fichier permet uniquement des caractères dans la gamme a-z A-Z 0-9, (virgule) et - (moins)

Vérifiez sa valeur. Si vous avez modifié le gestionnaire de session, vous devez utiliser uniquement les caractères autorisés pour ce gestionnaire de session spécifique.


Ressources:

+0

$ _POST ['PHPSESSID'] arrive en tant que "88rbfemtnma9padi34kfm7imk0". session.save_handler est "fichiers" Cela me rend fou. Je peux confirmer que l'ID de session existe car dans un autre navigateur, je fais var_dump (session_id()) et il retourne la valeur exacte qui arrive par la requête. –

+0

Votre session n'est-elle pas détruite plus tard dans votre code? –

-1

Il y avait un problème avec la session chemin de sauvegarde. Il n'a pas été configuré correctement, donc je peux supposer que PHP comptait sur les cookies du navigateur pour créer la session au lieu des fichiers dans le chemin de sauvegarde de la session.