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

Gus*_*avo 38 php mysql session sessionid

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

sac*_*een 34

取决于session.hash_functionsession.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个字符串

  • 作为参考,如果使用MD5散列函数和每个字符4个散列位,则session_id长度也将为32.这让我今天把头发撕了几个小时. (3认同)
  • @GustavoPinent 字符数没有安全隐患,只有具有其固有哈希大小的哈希函数。如何编码散列只是传输或存储系统需要什么序列化的问题。从理论上讲,您可以使用一个简单的位域将 SHA1 编码为 20 个字节。不幸的是,cookie 和 URI(公共传输)仅支持字符,并且根据您可以使用的字符集和字符编码,您将有序列化开销;double 为 4 位/字符(此处暗示字符为 8 位长——其他 4 位被浪费了)。 (2认同)
  • 从 PHP 7.1.0 开始,有 [`session.sid_length`](https://www.php.net/manual/en/session.configuration.php#ini.session.sid-length) 而不是 `session`。 hash_function` 和 `session.hash_bits_per_character`。 (2认同)

And*_*ron 30

@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
Run Code Online (Sandbox Code Playgroud)

并使用示例正则表达式来检查会话ID:

preg_match('/^[a-zA-Z0-9,-]{22,40}$/', $sessionId)
Run Code Online (Sandbox Code Playgroud)

  • 优秀的答案,对我来说是一个难题. (3认同)