Je crée une table dans une base de données MySQL pour enregistrer certaines données de session, notamment session_id
. Quelle doit être la longueur de la VARCHAR
pour stocker le session_id
chaîne ?
Réponses
Trop de publicités?Dépend de fonction de hachage de la session y session.hash_bits_par_caractère .
Consultez le identifiant de la session pour plus d'informations.
Plus la valeur de session.hash_bits_per_character est élevée, plus la longueur de votre session_id deviendra plus court en utilisant plus de bits par caractère. Les valeurs valeurs possibles sont 4, 5 ou 6.
Lorsque l'on utilise sha-1 pour le hachage (en définissant ini_set('session.hash_function', 1), les longueurs suivantes des chaînes de suivantes sont produites par les trois paramètres de session.hash_bits_par_caractère de session :
Chaîne de 4 à 40 caractères
Chaîne de 5 à 32 caractères
Chaîne de 6 à 27 caractères
@sachleen la réponse n'est pas complète.
Des informations plus détaillées sur la longueur de l'identifiant de session sont décrites aquí .
Resumen:
128-bit digest (MD5)
4 bits/char: 32 char SID
5 bits/char: 26 char SID
6 bits/char: 22 char SID
160-bit digest (SHA-1)
4 bits/char: 40 char SID
5 bits/char: 32 char SID
6 bits/char: 27 char SID
Et un exemple de regex pour vérifier l'identifiant de la session :
preg_match('/^[a-zA-Z0-9,-]{22,40}$/', $sessionId)
Il dépend de ces paramètres de configuration : fonction de hachage de la session y session.hash_bits_par_caractère
Les ID de session plus courts ont plus de chances d'entrer en collision, mais cela dépend aussi beaucoup de l'algorithme de génération des ID. Compte tenu des paramètres par défaut, la longueur de l'ID de session devrait être appropriée pour la plupart des applications. Pour des implémentations plus sécurisées, vous pouvez envisager de regarder comment PHP génère ses identifiants de session et vérifier si c'est cryptographiquement sécurisé. Si ce n'est pas le cas, vous devriez utiliser votre propre algorithme avec une source d'aléatoire cryptographiquement sécurisée.