php 会话 ID 的唯一程度

2022-08-30 07:53:31

php 会话 ID 有多独特?我从阅读过的各种内容中得到的印象是,我不应该依赖两个用户永远不会获得相同的会话ID。它不是一个 GUID 吗?


答案 1

它不像发货时那样独特。在默认配置中,它是各种事物的哈希值的结果,包括gettimeofday的结果(这并不是非常独特),但是如果您担心,则应将其配置为从/dev/urandom中提取一些熵,就像这样

ini_set("session.entropy_file", "/dev/urandom");
ini_set("session.entropy_length", "512");

代码中搜索“php_session_create_id”,了解他们正在使用的实际算法。

编辑添加:有一个由pid播种的DFA随机数生成器,与usecs中的时间混合。这不是一个坚定的唯一性条件,特别是从安全角度来看。使用上面的熵配置。

更新:

从 PHP 5.4.0 开始,session.entropy_file默认为 /dev/urandom 或 /dev/arandom(如果可用)。在 PHP 5.3.0 中,此指令默认为空。PHP 手册


答案 2

Session_id确实可以复制,但概率非常低。如果你有一个流量相当的网站,它可能会在你的网站生活中发生一次,并且只会惹恼一个用户一个会话。

除非您期望为银行业建立一个非常高流量的网站或服务,否则这不值得关心。


推荐