92 votes

Comment unique, c'est l'id de session php

Comment unique, c'est le php id de session? J'ai eu l'impression de diverses choses que j'ai lu que je ne devrait pas s'appuyer sur les deux utilisateurs ne jamais avoir le même id de session. N'est-il pas un GUID?

67voto

djsadinoff Points 2175

Il n'est pas unique à la livraison. Dans la configuration par défaut c'est le résultat de hachage différentes choses, y compris le résultat de gettimeofday (ce qui n'est pas terriblement unique), mais si vous êtes inquiet, vous devez le configurer pour en tirer de l'entropie à partir de /dev/urandom, comme

ini_set("session.entropy_file", "/dev/urandom");
ini_set("session.entropy_length", "512");

recherche pour "php_session_create_id" dans le code pour l'algorithme réel qu'ils utilisent.

Edité pour ajouter: Il y a un DFA générateur de nombres aléatoires ensemencées par le pid, mélangé avec le temps dans usecs. Ce n'est pas un cabinet condition d'unicité en particulier dans une perspective de sécurité. L'utilisation de l'entropie config ci-dessus.

Mise à jour:

Depuis PHP 5.4.0 session.entropy_file par défaut est /dev/urandom ou /dev/arandom si elle est disponible. En PHP 5.3.0 cette directive est de gauche vide par défaut. Manuel PHP

41voto

e-satis Points 146299

Session_id peut en effet être reproduit, mais la probabilité est très faible. Si vous avez un site avec un bon trafic, il peut se produit une fois que vous site web de la vie, et juste agacer plus d'un utilisateur pour une session.

Ce n'est pas la peine de soins, sauf si vous vous attendez à construire un très haut trafic de site web ou d'un service pour l'industrie bancaire.

11voto

Paul Dixon Points 122033

Vous pouvez installer une alternative de hachage fonction de génération si vous souhaitez personnaliser la façon dont l'ID est généré (c'est une 128 bits nombre généré via MD5 par défaut). Voir http://www.php.net/manual/en/session.configuration.php#ini.session.hash-function

Pour plus d'informations sur les sessions PHP, essayez cet excellent article http://shiflett.org/articles/the-truth-about-sessions ce qui a également des liens vers d'autres articles à propos de fixation de session et de détourner.

6voto

MrJ Points 143

Taille de session_id
Supposons que seesion_id est distribuée de manière uniforme et a taille=128 bits. Supposons que chaque personne sur la planète connecte une fois par jour avec une persistante d'une nouvelle session pour 1000 ans.

num_sesion_ids  = 1000*365.25 *7*10**9 < 2**36
collission_prob < 1 - (1-1/2**82)**(2**36)  ≈ 1 - e**-(1/2**46) 
                ≈ 1/2**46 

Donc, la probabilité d'un ou de plusieurs de collision est inférieur à 70 mille milliards. D'où la 128 bits de taille de la session_id doit être assez grande. Comme mentionné dans d'autres commentaires, la session_manager peut également vérifier que les nouveaux session_id n'existe pas déjà.

L'aléatoire
Donc la grande question je pense est de savoir si le session_id:s sont générés avec un bon pseudo aléatoire. Sur que vous ne pouvez jamais être certain, mais je vous conseille d'utiliser un bien connu et souvent utilisé en solution standard à cet effet (comme vous l'avez sans doute déjà fait).

Même si les collisions sont évitées en raison de la vérification, de l'aléatoire et de la taille de session_id est important, pour que les pirates ne peuvent pas, de toute façon ne qualifiée de deviner et de trouver active session_id:s avec grande probabilité.

2voto

gizmo Points 8528

Non, l'id de session n'est pas un GUID, mais deux utilisateurs ne devraient pas obtenir le même id de session, car ils sont stockés sur le serveur.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X