42

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

4

5 回答 5

38

取决于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 个字符的字符串

于 2012-09-03T01:02:36.340 回答
33

@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)
于 2014-03-14T09:26:19.123 回答
4

这取决于这些配置设置: session.hash_functionsession.hash_bits_per_character

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

于 2012-09-03T01:01:51.207 回答
0

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

于 2014-07-10T12:12:48.117 回答
0

通过常规 php 安装长度始终为 26 (exmp: psprdaccghmmre1oo2eg0tnpe6)

于 2014-09-18T06:59:23.177 回答