我一直对会话如何在内部工作感兴趣,但我对C知之甚少(并且不确定在PHP源代码中查找的位置).
这就是我对会议的理解:
$_SESSION)时,它存储在文件系统上,具有相关的会话ID和到期时间.它是否正确?还有什么方法可以创建会话ID?我假设它是基于时间的,但如果两个用户同时发送请求怎么办?内部有哪些方法可以防止它们获得相同的ID?
谢谢,
Gum*_*mbo 31
我的理解是内部会话处理过程如下:
当session_start被调用时,PHP正在寻找来自客户端的参数通过了POST,GET发送,或在Cookie(取决于配置;请参阅session.use_cookies,session.use_only_cookies和session.use_trans_sid指定)用的名称session.name的值,用于使用已启动会话的会话ID.
如果找到有效的会话ID,它会尝试从存储中检索会话数据(请参阅session.save_handler)以将数据加载到$_SESSION.如果它无法找到ID或禁止使用它,PHP会使用哈希函数(请参阅session.hash_function)生成一个新ID ,该源代码生成随机数据(请参阅session.entropy_file).
在运行时结束时或session_write_close调用时,会话数据将$_SESSION被存储到指定的存储中.
Pau*_*xon 17
查看php源代码中ext/session/session.c中的php_session_create_id
它是这样的:
因此获得重复是非常困难的.但是,您应该熟悉会话固定的概念,这允许攻击者可能选择他们的目标将采用的session_id - 请参阅会话和Cookie以获得良好的入门.