我在MySQL数据库中创建了一个表来保存一些会话数据,包括session_id。存储session_id字符串的VARCHAR的长度应该是多少?
session_id
VARCHAR
vm0i2vca1#
取决于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字符串
ioekq8ef2#
@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
并对regex进行示例以检查会话ID:
preg_match('/^[a-zA-Z0-9,-]{22,40}$/', $sessionId)
yshpjwxd3#
这取决于以下配置设置:session.hash_function和session.hash_bits_per_character较短的会话ID长度具有较高的冲突机会,但这也在很大程度上取决于ID生成算法。给定默认设置,会话ID的长度应该适合大多数应用程序。对于更高安全性的实现,您可以考虑研究PHP如何生成其会话ID,并检查它是否是加密安全的。如果不是,那么您应该使用加密安全的随机性源来运行自己的算法。
sdnqo3pr4#
通过常规的php安装长度总是26(exmp:psprdaccghmmre1oo2eg0tnpe6)
8iwquhpp5#
从PHP 7.1开始,如果使用session_create_id(),则默认会话ID长度为32个字符,但是用户可以在php.ini中更改此默认值查看php.ini设置session.sid_length
yws3nbqq6#
我不知道我的应用程序将用于何处,然后我将其设置为:VARCHAR(127),希望它对未知的MySQL用户很有用。
6条答案
按热度按时间vm0i2vca1#
取决于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字符串
ioekq8ef2#
@sachleen答案不全。
有关会话ID长度的更多详细信息,请参见here。
总结:
并对regex进行示例以检查会话ID:
yshpjwxd3#
这取决于以下配置设置:session.hash_function和session.hash_bits_per_character
较短的会话ID长度具有较高的冲突机会,但这也在很大程度上取决于ID生成算法。给定默认设置,会话ID的长度应该适合大多数应用程序。对于更高安全性的实现,您可以考虑研究PHP如何生成其会话ID,并检查它是否是加密安全的。如果不是,那么您应该使用加密安全的随机性源来运行自己的算法。
sdnqo3pr4#
通过常规的php安装长度总是26(exmp:psprdaccghmmre1oo2eg0tnpe6)
8iwquhpp5#
从PHP 7.1开始,如果使用session_create_id(),则默认会话ID长度为32个字符,但是用户可以在php.ini中更改此默认值
查看php.ini设置session.sid_length
yws3nbqq6#
我不知道我的应用程序将用于何处,然后我将其设置为:VARCHAR(127),希望它对未知的MySQL用户很有用。