Ich mache eine Tabelle in einer MySQL-Datenbank, um einige Sitzungsdaten zu speichern, einschließlich session_id
. Wie lang sollte die VARCHAR
sein, um die session_id
Zeichenfolge zu speichern?Wie lang ist eine PHP-Session-ID-Zeichenfolge?
Antwort
Hängt von session.hash_function und session.hash_bits_per_character ab.
Überprüfen Sie die session_id Seite für weitere Informationen.
Je höher Sie session.hash_bits_per_character die kürzere Ihre Sitzungs_ID eingestellt unter Verwendung von mehr Bits pro Zeichen werden wird. Die möglichen Werte sind 4, 5 oder 6.
Bei Verwendung von SHA-1-Hashing für (durch ini_set Einstellung ('session.hash_function', 1) die folgenden Sitzungs Zeichenfolge Längen durch die Drei-Sitzung hergestellt. hash_bits_per_character Einstellungen:
4-40 Zeichenkette
5-32 Zeichenkette
6-27 Zeichenkette
Es hängt von diesen Konfigurationseinstellungen: session.hash_function und session.hash_bits_per_character
Kürzere Sitzungs-ID Längen die höhere Wahrscheinlichkeit einer Kollision haben, aber das hängt auch viel auf dem ID-Erzeugungsalgorithmus. Angesichts der Standardeinstellungen sollte die Länge der Sitzungs-ID für die meisten Anwendungen angemessen sein. Bei Implementierungen mit höherer Sicherheit sollten Sie überlegen, wie PHP seine Sitzungs-IDs generiert und überprüft, ob es kryptografisch sicher ist. Wenn dies nicht der Fall ist, sollten Sie Ihren eigenen Algorithmus mit einer kryptografisch sicheren Quelle der Zufälligkeit ausführen.
Die Chance einer Kollision wird durch Hash-Funktion, verwendet Entropie vollständig bestimmt, und das Volumen des Verkehrs. Wenn Sie eine sicherere Hashfunktion verwenden, wird eine größere Sitzungs-ID-Zeichenfolge generiert. Wenn Sie also kürzere Sitzungs-ID-Längen mit höherer Kollisionswahrscheinlichkeit meinen, sind Sie richtig, verkürzen diese Länge jedoch, indem Sie eine höhere Bittiefe pro Zeichen verwenden wird keine Wirkung haben. – Jason
Ist die Sitzungs-ID mit 128 Zeichen für generische Webanwendungen zu umfangreich? – TheFrost
@sachleen Antwort ist nicht voll.
Detailliertere Informationen über die Sitzungs-ID-Länge werden beschrieben here.
Zusammenfassung:
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
Und Probe regex Session-ID zu überprüfen:
preg_match('/^[a-zA-Z0-9,-]{22,40}$/', $sessionId)
das war hilfreich für mich !!! – SirJ
Ausgezeichnete Antwort, das fehlende Stück eines Puzzles für mich. –
Ich weiß nicht, wo meine Anwendung für dann verwendet werden soll ich es einrichten als: VARCHAR (127) und hoffe, dass es für unknown MySQL-Benutzer toll sein wird.
Wenn Sie mit unbekannt meinen, dass Sie unbekannt sind, können Sie es als TEXT einrichten, das sich nach Bedarf zusammenzieht und erweitert. Andernfalls haben Sie viel freien Speicherplatz in Ihrer Tabelle, und trotzdem kann es mit einem Wert von 128 fehlschlagen . – Gustavo
@GustavoPinent VARCHAR ist schneller als TEXT. –
@TichomirMitkov yep, er wird sich zwischen sicheren und flexiblen TEXT und schnellen VARCHAR entscheiden müssen – Gustavo
durch die regelmäßige PHP Einbaulänge ist immer 26 (ExMP: psprdaccghmmre1oo2eg0tnpe6)
Also 40 Zeichen ist eine sichere Menge, und wenn ich einige Bytes speichern möchte, muss ich die PHP-Konfiguration überprüfen, nicht wahr? – Gustavo
Überprüfen Sie php.ini, um zu sehen, was die Einstellungen sind. 40 Zeichen sind das Ergebnis der SHA-1-Hash-Funktion und 4 Bits pro Zeichen. Sie können 'echo strlen (session_id());' ausführen, um die Länge zu sehen und Ihr Datenbankfeld entsprechend zu gestalten. – sachleen
Als Referenz ist die Länge der Session-ID 32, wenn Sie die MD5-Hash-Funktion und 4 Hash-Bits pro Zeichen verwenden. Das hat mich heute ein paar Stunden die Haare ausreißen lassen. – sevenseacat