我今天注意到我的网站会话文件中有一些文件名比其余文件的名称明显要小,例如:
标准会话文件:
sess_0020cc255681808f78c08b67cd88cbcea13f45ee7629754ed82ccb8b010cf83d2b353b7136847f2876d99f3297a5def5bcc62b433d6d56d7f1b301f82c833aad
(5 + 128字符文件长度)
异常会话文件:
sess_629aca24e094f17d02b3d105ebe9e5d4
这个网站非常繁忙,有很多的流量(每月约22k访问者)。查看会话文件夹,这些非常短命名的会话文件只占 ~1%(实际上是0.92%)。我在去年(2015年)重新设计这个网站之前曾经阅读过很多关于会话的知识,并且根据那些知识,在我的 php.ini
中设置如下:
session.cookie_httponly=1
session.use_only_cookies=1
session.cookie_secure=1
session.entropy_file=/dev/urandom
session.hash_function=whirlpool
session.session.use_trans_sid=0
session.entropy_length=32
编辑(附加内容):
session.hash_bits_per_character = 4
session.sid_length
在使用PHP 5.6.2版本时未定义(不可定义)。
根据我的了解,这应该通常是可以的。我看过很少关于如何确保最小文件长度的话题,虽然我读过关于使用session.entropy_length
的各种内容,但这似乎并没有明显地适用于此问题。
我唯一不确定如何使用和需要使用的是熵长度值。
我的问题
- 什么导致1%的会话只有5+32个字符长?
- 如何设置所有会话都是相同长度的(5+128个字符)?
我意识到下面的问题我可以尝试并查看结果因为它不会造成任何伤害,但是如果上面提供的解决方案确实是使用session.entropy_length
的预期用途,那将是有用的。关于熵长度实际上的应用几乎没有文献记录。
增加会话熵长度值会改善这个问题吗?[NO]
我认为目前可能存在一个小潜在问题,即会话名称冲突,而且似乎有很多会话文件非常长,但还是有明显的少数相对微不足道。
更新
从评论中,也许值得我在此总结一些细节:
- 问题不在于我的浏览器(!!)
- 这是使用PHP 5.6.2版本
- LAMP堆栈在[单个]WHM服务器上运行。
- 如果运行PHP-cli,则只能由服务器主机运行,尽管我真的怀疑他们是否在运行它。我很了解他们,也是一个不错的客户。
- 我已经检查并确认网站
htaccess
文件没有对PHP的任何方面进行更改。 - 服务器运行的错误日志非常少(过去一周有14个错误,来自9k的访问量,所有错误都是404,来自机器人尝试入侵Wordpress【该站点不是Wordpress】)。
- PHP通过suPHP运行(版本目前未知),我也正在考虑更新suphp,但我不认为这会直接与此问题相关。
- 根据Ryan Vincent的建议,我将设置通知,当制作长度小于128字符的会话时(并希望从哪个地址发出)。
- 会话文件存储文件夹在PHP.ini中定义,因此如果使用外部PHP.ini,则会话可能出现在其他文件夹中,如
/temp
。
htaccess
文件。我还没有尝试过您提到的时间相关性,但错误日志条目非常少(与访问者计数相比),我认为这并没有什么帮助(例如,在过去的7天中,有2组服务器错误日志,都是来自爬行WordPress登录的404...(这不是WP网站) - Martinsession_regenerate_id
)。但是,我只得到了128个字符的哈希值。您可以使用以下PHP代码创建自己的情况:session_id(md5("something"));
- Chris Lear