【发布时间】:2012-08-27 18:45:10
【问题描述】:
我正在 MySQL 数据库中创建一个表来保存一些会话数据,包括session_id。存储session_id 字符串的VARCHAR 的长度应该是多少?
【问题讨论】:
标签: php mysql session sessionid
我正在 MySQL 数据库中创建一个表来保存一些会话数据,包括session_id。存储session_id 字符串的VARCHAR 的长度应该是多少?
【问题讨论】:
标签: php mysql session sessionid
通过常规的php安装长度总是26(例如:psprdaccghmmre1oo2eg0tnpe6)
【讨论】:
我不知道我的应用程序将用于何处,然后我将其设置为: VARCHAR(127) 并希望它对未知的 MySQL 用户有帮助。
【讨论】:
@sachleen 回答不完整。
有关会话 ID 长度的更多详细信息,请参阅here。
总结:
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
以及用于检查会话 id 的示例正则表达式:
preg_match('/^[a-zA-Z0-9,-]{22,40}$/', $sessionId)
【讨论】:
取决于session.hash_function 和session.hash_bits_per_character。
查看session_id 页面了解更多信息。
你设置的 session.hash_bits_per_character 越高,你的 session_id 将成为每个字符使用更多位。可能的 值为 4、5 或 6。
当使用 sha-1 进行散列时(通过设置 ini_set('session.hash_function', 1) 以下会话字符串 长度由三个 session.hash_bits_per_character 产生 设置:
4 - 40 个字符的字符串
5 - 32 个字符的字符串
6 - 27 个字符的字符串
【讨论】:
echo strlen(session_id()); 查看长度并相应地制作您的数据库字段。
session.sid_length 而不是 session.hash_function 和 session.hash_bits_per_character。
这取决于这些配置设置: session.hash_function 和 session.hash_bits_per_character
会话 ID 长度越短,发生冲突的可能性就越大,但这也很大程度上取决于 ID 生成算法。给定默认设置,会话 ID 的长度应该适合大多数应用程序。对于更高安全性的实现,您可以考虑查看 PHP 如何生成其会话 ID 并检查它是否在密码学上是安全的。如果不是,那么您应该使用加密安全的随机源推出自己的算法。
【讨论】: