0

我正在研究 php 项目。我只想这样做,当我关闭浏览器时,取消设置或销毁会话。

这里我也试过

ini_set('session.cookie_lifetime', 0) 和 session_set_cookie_params(0) 在 session_start() 之前;

它在 Windows 操作系统中运行良好,但在 MAC 操作系统中运行良好。

提前致谢。

4

2 回答 2

4

一个会话有两个部分。

  1. 存储在服务器上的数据
  2. 客户端上带有会话 id 的 cookie

当浏览器关闭时,没有可靠的方法来删除服务器上的数据。每个健全的会话系统只是定期清理旧数据(如果 N 分钟内没有关联浏览器的迹象)。

浏览器上的cookie通常是没有过期时间发送的,这意味着浏览器退出时它就会过期。这工作可靠。

如果您在 Windows 客户端上做任何您想做的事,那么我会假设您正在谈论使 cookie 过期。

这将在 Mac 和 Windows 上发生。我最好的猜测是你的测试有问题。在 Windows 上,应用程序通常在最后一个窗口关闭时退出。在 Mac 上,应用程序通常要求您明确退出它们,但如果您只是关闭最后一个窗口,则保持打开状态。

为确保 cookie 过期,您必须明确退出浏览器(通过从菜单中选择退出或右键单击并在 Dock 中的图标上选择退出)。

服务器无法检测到最后一个窗口何时关闭并远程终止会话。

于 2012-05-09T10:40:34.813 回答
1

它在 Windows 中运行良好

这或多或少意味着它有效。

但不适用于 MAC 操作系统

这大概是个误会。您需要关闭所有浏览器窗口,浏览器才能销毁会话 cookie。很可能您只关闭了多个窗口中的一个,并且至少有一个浏览器实例仍然存在(您可以top在终端窗口中检查这种情况)。

于 2012-05-09T10:41:16.960 回答