我在MySQL数据库中创建一个表以保存一些会话数据,包括session_id
。 VARCHAR
存储session_id
字符串的长度应该是多少?
答案 0 :(得分:33)
取决于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个字符串
答案 1 :(得分:29)
@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)
答案 2 :(得分:4)
这取决于这些配置设置: session.hash_function 和 session.hash_bits_per_character
较短的会话ID长度具有较高的冲突机会,但这也很大程度上取决于ID生成算法。给定默认设置,会话ID的长度应适合大多数应用程序。对于更高安全性的实现,您可以考虑查看PHP如何生成其会话ID并检查它是否在加密方面是安全的。如果不是,那么您应该使用加密安全的随机源来推广自己的算法。
答案 3 :(得分:0)
我不知道我的应用程序将用于何处,然后我将其设置为: VARCHAR(127) 并希望对于未知的MySQL用户来说会很棒。
答案 4 :(得分:0)
通过常规php安装长度始终为26(exmp:psprdaccghmmre1oo2eg0tnpe6)