我注意到了PHP中的一个奇怪行为。在php.ini
,session.hash_function
设置为sha256
,PHP生成一个合适的PHPSESSID
,但是,它也将花费ANY值由用户提供,即使它更短。PHP会话处理程序和PHPSESSID生成/验证
wget --header="Cookie: PHPSESSID=notrandom" "http://someserver.com/test.php"
例如,上述线路将触发会话处理器和notrandom
创建一个新的会话,如果它是一个有效的会话。
我的问题是双重的:
-
- 这是正常/期望行为?
-
是那里的会话处理的方式读/写功能的信号到PHP所提供的会话ID是无效的(即不是
sha256
)和会话无法启动?或者,如果客户端提供的会话ID无效(或仅仅找不到),服务器生成自己的值(
session_regenerate_id
?)而不是使用用户提供的值是否更合理?
Got it! session_status()可能是要走的路,但我还没有PHP 5.4(仍然在5.3),所以通过使用自定义Session Handler来读取()并检查提交的PHPSESSID是否存在找到解决办法。这只在需要现有会话的页面上完成 - 其他会调用session_start()并绕过此问题/解决方案。 – pracheta986919