PHP会话ID字符串的长度是多少?

pprl5pva  于 2023-06-04  发布在  PHP
关注(0)|答案(6)|浏览(546)

我在MySQL数据库中创建了一个表来保存一些会话数据,包括session_id。存储session_id字符串的VARCHAR的长度应该是多少?

vm0i2vca

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字符串

ioekq8ef

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)
yshpjwxd

yshpjwxd3#

这取决于以下配置设置:session.hash_functionsession.hash_bits_per_character
较短的会话ID长度具有较高的冲突机会,但这也在很大程度上取决于ID生成算法。给定默认设置,会话ID的长度应该适合大多数应用程序。对于更高安全性的实现,您可以考虑研究PHP如何生成其会话ID,并检查它是否是加密安全的。如果不是,那么您应该使用加密安全的随机性源来运行自己的算法。

sdnqo3pr

sdnqo3pr4#

通过常规的php安装长度总是26(exmp:psprdaccghmmre1oo2eg0tnpe6)

8iwquhpp

8iwquhpp5#

从PHP 7.1开始,如果使用session_create_id(),则默认会话ID长度为32个字符,但是用户可以在php.ini中更改此默认值
查看php.ini设置session.sid_length

yws3nbqq

yws3nbqq6#

我不知道我的应用程序将用于何处,然后我将其设置为:VARCHAR(127),希望它对未知的MySQL用户很有用。

相关问题