Estoy haciendo una tabla en una base de datos MySQL para guardar algunos datos de la sesión, incluyendo session_id
. ¿Cuál debería ser la longitud del VARCHAR
para almacenar la cadena session_id
?¿Cuál es la longitud de una cadena de identificación de sesión de PHP?
Respuesta
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
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.
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
¿La id. De sesión de 128 caracteres es una exageración para la aplicación web genérica? – TheFrost
@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)
esto fue útil para mí! – SirJ
Excelente respuesta, la pieza faltante de un rompecabezas para mí. –
no sé donde se utilizará mi solicitud para luego configurarlo como: VARCHAR (127) y espero que sea genial para usuarios desconocidos de MySQL.
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
@GustavoPinent VARCHAR es más rápido que TEXT. –
@TichomirMitkov sí, tendrá que decidir entre TEXTO seguro y flexible y VARCHAR rápido – Gustavo
por la longitud normal de instalación de PHP es siempre 26 (exmp: psprdaccghmmre1oo2eg0tnpe6)
- 1. ¿Cuál es la longitud máxima de una cadena en PHP?
- 2. ¿Cuál es la longitud máxima posible de una cadena .NET?
- 3. ¿Cuál es la longitud de cadena de un GUID?
- 4. PHP: ¿Cuál es la duración predeterminada de una sesión
- 5. ¿Es una buena práctica mostrar la identificación de la sesión en la url?
- 6. ¿Cómo encriptar la identificación de la sesión en una cookie?
- 7. ¿Cuál es la longitud máxima de una propiedad de lista?
- 8. Comprobar longitud de cadena En PHP
- 9. ¿Cuál es la mejor manera de crear una página de inicio de sesión de PHP?
- 10. ¿Cuál es la longitud máxima posible de una cadena de consulta?
- 11. PHP: ¿cuál es la longitud total de una variable global de publicación?
- 12. ¿Qué usar para la identificación de inicio de sesión?
- 13. Longitud de cadena de límite
- 14. ¿Cuál es la longitud ideal de una variable URL
- 15. ¿Cuál es la longitud máxima de una consulta mongodb?
- 16. Cómo quitar la identificación de IMDB de una cadena en php?
- 17. ¿Cuál es la diferencia entre longitud y longitud()?
- 18. determinar la longitud de una cadena literal
- 19. PHP TZ configuración de longitud
- 20. ¿Cuál es la longitud máxima de un objeto NSString?
- 21. ¿Cuál es la prueba más eficiente de si una cadena PHP termina con otra cadena?
- 22. Longitud de la cadena cifrada
- 23. ¿Cómo eliminar una sesión de PHP?
- 24. ¿Cuál es la longitud máxima de un parámetro de cadena para el procedimiento Almacenado?
- 25. Hash de una cadena de longitud específica
- 26. cómo obtener las variables de sesión usando la identificación de la sesión
- 27. Problemas de la sesión PHP
- 28. ¿Cuál es la longitud máxima de cuadro de texto HTML
- 29. Cálculo de la longitud de una cadena multibyte japonesa con kana de ancho medio en PHP
- 30. ¿Cuál es la sintaxis de PHP para verificar "no es nulo" o una cadena vacía?
Entonces, 40 caracteres es un conjunto seguro, y si quiero guardar algunos bytes, debo verificar la configuración de php, ¿verdad? – Gustavo
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
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