我在MySQL数据库中创建了一个表,用于保存一些会话数据,包括 session_id
。为了存储 session_id
字符串,VARCHAR
的长度应该是多少?
此取决于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个字符的字符串
@sachleen的回答不够完整。
关于会话ID长度的更详细信息在这里描述。
摘要:
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
较短的会话ID长度具有更高的碰撞几率,但这也很大程度上取决于ID生成算法。在默认设置下,会话ID的长度应该适用于大多数应用程序。对于更高安全性的实现,您可以考虑查看PHP生成其会话ID的方式,并检查是否具有加密安全性。如果没有,那么您应该使用具有密码学安全随机源的自己的算法。
在常规的PHP安装中,长度始终为26(例如:psprdaccghmmre1oo2eg0tnpe6)
从PHP 7.1开始,如果使用session_create_id()函数,则默认的会话ID长度为32个字符,但用户可以在php.ini中更改此默认值。
请参阅php.ini设置session.sid_length
我不知道我的应用程序将在哪里使用,所以我将其设置为: VARCHAR(127) 并希望它对未知的MySQL用户非常有用。
echo strlen(session_id());
查看长度,并相应地调整数据库字段。 - sachleensession.sid_length
代替session.hash_function
和session.hash_bits_per_character
。请参考session.sid_length
。 - Marten Koetsier