2012-09-03 25 views

Respuesta

30

Depende de session.hash_function y session.hash_bits_per_character.

Consulte la página session_id para obtener más información.

Cuanto más alto sea el más corto session.hash_bits_per_character su session_id se convertirá utilizando más bits por carácter. Los posibles valores son 4, 5, o 6.

Al utilizar SHA-1 para hashing (estableciendo ini_set ('session.hash_function', 1) la siguiente cadena de sesión longitudes se producen por los tres sesión. hash_bits_per_character ajustes:

4-40 cadena de caracteres

5-32 cadena de caracteres

6-27 cadena de caracteres

+0

Entonces, 40 caracteres es un conjunto seguro, y si quiero guardar algunos bytes, debo verificar la configuración de php, ¿verdad? – Gustavo

+0

Compruebe php.ini para ver cuáles son las configuraciones. 40 caracteres es el resultado de la función SHA-1 hash y 4 bits por carácter. Puede hacer 'echo strlen (session_id());' para ver la longitud y hacer que su campo de base de datos corresponda. – sachleen

+3

Como referencia, la longitud de session_id también será 32 si usa la función hash MD5 y 4 hash bits por carácter. Eso me hizo arrancarme los pelos por unas pocas horas hoy. – sevenseacat

4

Depende de estos valores de configuración: session.hash_function y session.hash_bits_per_character

más corto longitudes de identificación de sesión tienen la mayor probabilidad de colisión, pero esto también depende mucho de la algoritmo de generación de ID. Dada la configuración predeterminada, la longitud de la ID de la sesión debe ser adecuada para la mayoría de las aplicaciones. Para implementaciones de mayor seguridad, puede considerar investigar cómo PHP genera sus ID de sesión y verificar si es criptográficamente segura. Si no es así, entonces debes rodar tu propio algoritmo con una fuente de aleatoriedad criptográficamente segura.

+3

La probabilidad de colisión está totalmente determinado por la función de hash, la entropía se utiliza, y el volumen de tráfico. Usar una función de hash más segura producirá una cadena de ID de sesión más grande, así que si eso es lo que quisiste decir con longitudes de ID de sesión más cortas con mayor probabilidad de colisión, entonces estás en lo correcto, pero acortando esa longitud usando una mayor profundidad de bits por carácter no tendrá efecto. – Jason

+0

¿La id. De sesión de 128 caracteres es una exageración para la aplicación web genérica? – TheFrost

26

@sachleen la respuesta no está completa.
Se describe información más detallada acerca de la longitud de la identificación de la sesión here.

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 

y expresiones regulares muestra para comprobar ID de sesión:

preg_match('/^[a-zA-Z0-9,-]{22,40}$/', $sessionId) 
+1

esto fue útil para mí! – SirJ

+3

Excelente respuesta, la pieza faltante de un rompecabezas para mí. –

0

no sé donde se utilizará mi solicitud para luego configurarlo como: VARCHAR (127) y espero que sea genial para usuarios desconocidos de MySQL.

+1

Si por desconocido quiere decir desconocido, puede considerar configurarlo como TEXTO que se contraerá y expandirá según sea necesario, de lo contrario tendrá mucho espacio vacío en su tabla, y aun así, podría fallar con un valor de 128 longitud. . – Gustavo

+0

@GustavoPinent VARCHAR es más rápido que TEXT. –

+0

@TichomirMitkov sí, tendrá que decidir entre TEXTO seguro y flexible y VARCHAR rápido – Gustavo

0

por la longitud normal de instalación de PHP es siempre 26 (exmp: psprdaccghmmre1oo2eg0tnpe6)

Cuestiones relacionadas