php会话ID有多独特

时间:2020-03-06 14:46:38  来源:igfitidea点击:

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

解决方案

不,会话ID不是GUID,但是两个用户不应获得与存储在服务器端相同的会话ID。

我尚未对此进行确认,但我相信php在创建具有该ID的会话ID之前会检查该ID是否已存在。

人们担心的会话劫持问题是有人发现活动用户的会话ID。可以通过多种方式防止这种情况发生,有关更多信息,我们可以在php.net上查看此页面,以及有关会话固定的本文

如果要自定义ID的生成方式,则可以安装其他哈希生成功能(默认情况下,它是通过MD5生成的128位数字)。参见http://www.php.net/manual/en/session.configuration.php#ini.session.hash-function

有关PHP会话的更多信息,请尝试这篇出色的文章http://shiflett.org/articles/the-truth-about-sessions,该文章也链接到其他有关会话固定和劫持的文章。

它并不是很独特。在默认配置中,它是各种事物的散列的结果,包括gettimeofday的结果(这并不是唯一的),但是如果我们担心,则应将其配置为从/ dev / urandom提取一些熵,就像这样

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

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

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

更新:

As of PHP 5.4.0 session.entropy_file defaults to /dev/urandom or
  /dev/arandom if it is available. In PHP 5.3.0 this directive is left
  empty by default. PHP Manual

Session_id确实可以重复,但是概率很低。如果网站访问量比较合理,那么它可能会在网站生命中发生一次,并且只会使一个会话的用户烦恼。

除非我们期望为银行业建立一个流量很高的网站或者服务,否则这不是值得关心的问题。