Numéro de session vraiment unique ?

HTML5, CSS3, Javascript, support des mobiles... Que penser de votre site ? Vous manquez d'informations pour la construction d'un site qui puisse s'afficher correctement partout ? C'est un problème simple, un peu complexe ? Venez ici !
guilhem_mdg
Lézard à collerette
Messages : 438
Inscription : 18 juin 2004, 09:13

Numéro de session vraiment unique ?

Message 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
Cordialement.
Guilhem.
calimo
Animal mythique
Messages : 14118
Inscription : 26 déc. 2003, 11:51

Message 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 :wink:

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)
Benoit
Administrateur
Messages : 4894
Inscription : 19 juil. 2003, 10:59

Message 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)
♫ Li tens s'en veit, je n'ai riens fais ;
Li tens revient, je ne fais riens. ♪
calimo
Animal mythique
Messages : 14118
Inscription : 26 déc. 2003, 11:51

Message 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 ? :shock: :lol:
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 :lol: )

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
guilhem_mdg
Lézard à collerette
Messages : 438
Inscription : 18 juin 2004, 09:13

Message par guilhem_mdg »

Merci de vos réponses.

J'utilise PHP et une BDD MySQL.

Cela doit-il signifier que je dois écrire :

Code : Tout sélectionner

session_id(uniqid());
session_start();
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
Cordialement.
Guilhem.
Benoit
Administrateur
Messages : 4894
Inscription : 19 juil. 2003, 10:59

Message par Benoit »

calimo a écrit :Si l'identifiant est unique... comment peut-il devenir encore plus unique ? :shock: :lol:
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);
}
♫ Li tens s'en veit, je n'ai riens fais ;
Li tens revient, je ne fais riens. ♪
Répondre

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 4 invités