Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP会话id字符串的长度是多少?_Php_Mysql_Session_Sessionid - Fatal编程技术网

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

PHP会话id字符串的长度是多少?,php,mysql,session,sessionid,Php,Mysql,Session,Sessionid,我正在MySQL数据库中创建一个表来保存一些会话数据,包括session\u id。存储会话id字符串的VARCHAR的长度应该是多少?它取决于以下配置设置: 和 会话ID长度越短,冲突的可能性越高,但这在很大程度上取决于ID生成算法。给定默认设置,会话ID的长度应该适合大多数应用程序。对于更高安全性的实现,您可以考虑查看PHP如何生成会话ID并检查它是否是加密安全的。如果不是,那么您应该使用加密安全的随机性源来运行自己的算法。取决于和 查看页面了解更多信息 设置的session.hash\u

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

它取决于以下配置设置:

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

取决于和

查看页面了解更多信息

设置的session.hash\u bits\u per\u字符越高,您的会话越短 通过每个字符使用更多位,会话id将变为。可能的 值为4、5或6

使用sha-1进行散列时(通过设置 ini_集合('session.hash_函数',1)以下会话字符串 长度由每个字符的三个session.hash\u位产生 设置:

4-40个字符的字符串

5-32个字符串

6-27个字符串


@Sachlen答案不完整。
描述了有关会话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)

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

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

所以40个字符是一个安全的集合,如果我想保存一些字节,我必须检查php配置,对吗?检查php.ini以查看设置是什么。40个字符是SHA-1哈希函数的结果,每个字符4位。您可以执行
echo strlen(session_id());
查看长度并相应地设置数据库字段。作为参考,如果使用MD5哈希函数和每个字符4个哈希位,会话id长度也将为32。这让我今天紧张了几个小时。@GustavoPinent字符数没有安全含义,只有具有固有h的哈希函数ash大小。如何对该散列进行编码只是传输或存储系统需要进行何种序列化的问题。理论上,您可以用一个简单的位字段在20字节内对SHA1进行编码。不幸的是,cookie和URI(常见传输)仅支持字符,并且根据您可以使用的字符集和字符编码,您将有序列化开销;每字符4位加倍(这里暗示字符长度为8位,其他4位被浪费)。从PHP 7.1.0开始,将有会话。哈希函数
和会话。每个字符的哈希位。冲突的可能性完全取决于哈希函数、使用的熵和通信量。使用更安全的哈希函数将生成更大的会话ID字符串,如果这就是您所说的更短的会话,那么n个ID长度有更高的碰撞机会,那么你是正确的,但是缩短每一个字符使用一个更高的比特深度的长度将不会有效果。128个字符长的会话ID对于一般的Web应用程序是不是太过了?如果未知的你是未知的,你可以考虑把它设置成按需要收缩和扩展的文本,其他的。明智地说,您的表中会有很多空白,即使如此,它也可能会以128长度值失败。@GustavoPinent VARCHAR比文本快。@TichomirMitkov yep,他将不得不在安全灵活的文本和快速VARCHAR之间做出决定。出色的答案,对我来说是拼图中缺失的一块。