Page 1 sur 1
Numéro de session vraiment unique ?
Publié : 07 août 2007, 15:36
par guilhem_mdg
Bonjour,
Lors de la création d'une session un numéro de session est généré automatiquement sur le serveur.
Est-il possible de vérifier que celui-ci est bien unique ?
Auquel cas, en générer un autre ?
Merci de votre aide.
Cordialement.
Guilhem.
Message envoyé avec : Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6
Publié : 07 août 2007, 20:48
par calimo
Tu peux l'enregistrer dans une base de données...
Mais à priori si tu as 20 chiffres (au hasard, c'est probablement plus en vrai), ça fait 2^20 > 10^6 possibilités, donc le risque est faible. Mais je suis sûr que ton système de génération a déjà une méthode pour vérifier l'unicité des identifiants de session
Message envoyé avec : Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.6) Gecko/20061201 Firemarsupilami Firefox/2.0.0.6 (Ubuntu-feisty)
Publié : 08 août 2007, 00:00
par Benoit
Si tu utilises par exemple PHP tu as une fonction
uniqid (ne pas suivre l'exemple qui fait un md5 dessus, c'est parfaitement stupide puisqu'on risque de perdre l'unicité justement)
Publié : 08 août 2007, 08:38
par calimo
Benoit a écrit :Si tu utilises par exemple PHP tu as une fonction
uniqid (ne pas suivre l'exemple qui fait un md5 dessus, c'est parfaitement stupide puisqu'on risque de perdre l'unicité justement)
J'adore la doc de cette fonction :
ce qui renforcera encore l'unicité de l'identifiant.
Si l'identifiant est unique... comment peut-il devenir encore plus unique ?
Et que se passe-t-il si la fonction est appelée 2 fois au cours de la même microseconde ?
Si tu utilises du Perl, tu peux utiliser le module
Session qui utilise un mécanisme de base de données (qui peut être un fichier texte) pour s'assurer d'une unicité absolue (qu'on ne peut pas augmenter

)
Message envoyé avec : Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6
Publié : 08 août 2007, 10:40
par guilhem_mdg
Merci de vos réponses.
J'utilise PHP et une BDD MySQL.
Cela doit-il signifier que je dois écrire :
Sinon que me conseillez-vous ?
En fait, je pose cette question parce que j'utilise 3 serveurs (qui se répartissent la charge) et j'ai déjà eu plusieurs fois ce problème. Ce qui est problématique pour un site de ecommerce...
Message envoyé avec : Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6
Publié : 09 août 2007, 01:30
par Benoit
calimo a écrit :Si l'identifiant est unique... comment peut-il devenir encore plus unique ?
Et que se passe-t-il si la fonction est appelée 2 fois au cours de la même microseconde ?
Ce n'est pas parce que le résultat est basé sur les microsecondes qu'il renverra deux fois la même chose à partir de la même microseconde. En général les générateurs de nombres pseudo-aléatoires se basent sur une fonction périodique (sur une très longue période) ET les microsecondes. Et là tu peux encore ajouter un préfixe que tu peux changer à chaque appel si vraiment tu n'as pas confiance.
guilhem_mdg : si tu as mysql5, comme dit dans les commentaires, tu peux même utiliser la fonction du serveur :
Code : Tout sélectionner
function uuid() {
return mysql_result(mysql_query('Select UUID()'),0);
}