我一直对会话内部如何工作很感兴趣,但我对 C 知之甚少(并且不确定在 PHP 源代码中哪里可以找到这一点)。
这是我目前对会话的理解:
- 当您启动会话时,用户会被分配一个存储在 cookie 中的会话 ID。
- 保存会话数据时(通过
$_SESSION
)它存储在文件系统上,并带有相关的会话 ID 和到期时间。
它是否正确?另外,创建会话 ID 的方法是什么?我假设它是基于时间的,但是如果两个用户同时发送请求怎么办?内部有哪些方法可以防止他们获得相同的 id?
Thanks,
我的理解是内部会话处理过程如下:
When session_start http://php.net/session_start被调用时,PHP 正在从客户端查找通过 POST、GET 或 cookie 发送的参数(取决于配置;请参阅会话.use_cookies http://php.net/manual/en/session.configuration.php#ini.session.use-cookies, session.use_only_cookies http://php.net/manual/en/session.configuration.php#ini.session.use-only-cookies, and 会话.use_trans_sid http://php.net/manual/en/session.configuration.php#ini.session.use-trans-sid) 的值的名称会话名称 http://php.net/manual/en/session.configuration.php#ini.session.name使用已启动会话的会话 ID。
如果它找到有效的会话 ID,它会尝试从存储中检索会话数据(请参阅会话.save_handler http://php.net/manual/en/session.configuration.php#ini.session.save-handler)将数据加载到$_SESSION
。如果找不到 ID 或其使用被禁止,PHP 会使用哈希函数生成一个新 ID(请参阅会话.hash_function http://php.net/manual/en/session.configuration.php#ini.session.hash-function)对生成随机数据的源的数据(参见会话.entropy_file http://php.net/manual/en/session.configuration.php#ini.session.entropy-file).
在运行时间结束时或当session_write_close http://php.net/session_write_close被调用时,会话数据在$_SESSION
存放到指定仓库。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)