我对 PHP 中的会话管理有点困惑。文档中的很多重点都放在神奇的 PHPSESSID cookie 上。我编写 Ajax 程序,实际上我正在考虑摆脱 cookie。我知道我可以在 php.ini 文件中这样做。似乎也可以通过我的登录脚本顶部的简单 ini_set("session.use_cookies",0) 来抑制 PHPSESSID。不要误会我的意思,我确实想要会话。我的 Ajax 握手会在需要时发布会话 ID。从以 cookie 为中心的文档中,人们只会获得这样的印象,即所有会话到期处理都是通过 cookie 上的时间戳完成的。我不清楚 cookie 的时间戳究竟如何提示服务器通过无状态连接使会话缓存过期?换句话说,在无 cookie 的设置中,如何指示服务器在一段时间后清理会话缓存?我还会调用 session_set_cookie_params 吗?看起来很奇葩...
如果我理解得很好,那么我应该调用 sessionID(sid) 并检查“”的返回值以判断“sid”是否已死。正确的?
谢谢。
session.cookie_lifetime影响session_start() 设置的 cookie的expires参数。就像setcookie(<sessionname>, <sessionid>, time()+<session.cookie_lifetime>, ...). 它建议客户端在之后不要使用该 cookie time()+<session.cookie_lifetime>(但它当然可以更早地删除它,根本不接受它或完全忽略“expires”参数)。
会话 id 用于选择“正确的”会话数据。即,如果请求不包含正确的会话 ID,则会话数据对 php 脚本不可用。
如果只有那个客户端知道会话 id(应该是这样)并丢弃包含会话 id 的 cookie,则会话数据将无法访问。无法访问但仍存在于服务器上。
当脚本调用 session_start() 时,有可能启动垃圾收集,请参阅session.gc_probability和session.gc_divisor。
然后平面文件会话处理程序循环遍历session.save_path指定的目录中的所有文件,并检查“上次修改时间”(mtime)。如果该时间戳比 now- session.gc_maxlifetime更旧,则文件将被删除(除非此文件对应于当前会话 ID,在这种情况下,文件的年龄无关紧要)。
这需要一些时间,因此不会在每次调用 session_start() 时执行。
即服务器上的会话文件可能比 session.cookie_lifetime 和 session.gc_maxlifetime 都旧。
session.cookie_lifetime 向客户端发出信号,表明 x 秒后无需存储 cookie/id。
session.gc_maxlifetime 表示会话机制不需要在 x 秒后保留数据。
但是只要数据保留在服务器上,如果发送了相应的 session-id ,就可以访问它。
| 归档时间: |
|
| 查看次数: |
2705 次 |
| 最近记录: |