【问题标题】:How can I destroy sessions if user closes the browser window or navigates away from page in php?如果用户关闭浏览器窗口或离开 php 页面,我如何销毁会话?
【发布时间】:2011-01-29 22:44:35
【问题描述】:

我有一些已保存的会话。如果用户关闭浏览器窗口或单个选项卡或导航离开页面,我想销毁所有会话。有什么办法可以做到吗?

【问题讨论】:

  • 如果用户在同一个会话中打开了多个窗口/选项卡会怎样?
  • 变量太多,您无法一一解释。简单明了,不用担心。
  • 如果您不使用内置会话系统,您也可以这样做。或者,如果您通过 POST 或 GET 在每个页面上传递一个变量,您可以将其关联到单个“活动选项卡”。

标签: php javascript session


【解决方案1】:

如今,所有现代选项卡式浏览器都相当复杂。因此,您只能依赖会话超时。不过也没什么大不了的。你确定你真的需要这个吗?这会让用户感到痛苦。

【讨论】:

    【解决方案2】:

    嗯,我的所有项目都使用CodeIgniterCodeIgniter 具有使用 cookie 存储数据的会话类。我可以在应用程序配置中设置 cookie 超时。将其设置为 0 将使 cookie 仅在页面打开时持续存在,当页面的所有选项卡在浏览器中关闭时,cookie 将被自动删除。

    如果您不想使用其他框架,那么您可以使用 cookie 来保存会话数据,这些数据只会持续到用户关闭浏览器选项卡。使用setcookie写入cookie数据,并从$_COOKIE变量中读取。

    【讨论】:

    • Cookies 不保存会话数据
    • 哇,太混乱了!你知道会话和 cookie 的区别吗?
    • Cookies 包含 PHPSESSID,它将用户链接到他的服务器存储的会话数据。
    • @Shrapnel,@animuson,你在会话中存储了什么数据?通过无状态 http 连接识别某些东西的数据,对吧?当用户在登录页面登录时,您将使用 session 来存储一些数据,可能是用户 ID,因此在下一个 http 连接中,您的脚本可以识别在以前的 http 连接中登录的用户并可能允许访问受保护的页面。您可以将“会话”数据存储到 cookie 中,而不是 PHP 内置 SESSION。 CodeIgniter 有库可以安全地执行此操作。所以,我不再在 SESSION 中使用 PHP 构建,我使用 cookie 来存储“会话”数据
    【解决方案3】:

    第一次设置$config['sess_expiration'] to 0

    然而,由于system/libraries/Session.php 文件中的代码,这会创建一个实际持续 2 年的 cookie

    接下来我们设置$config['sess_expiration'] to -1

    这对我完全不起作用。当我登录时它保存了会话变量,然后当我转到下一页时它就消失了。

    【讨论】:

      【解决方案4】:

      与 Donny 的回答类似,但您可以告诉内置 Session 类更改 PHPSESSID cookie 以在浏览器关闭时过期,而不是使用 Codeigniter:

      session_set_cookie_params(0);
      

      这必须在您使用它的每个页面上在 session_start() 之后调用(否则它会从 ini 参数 session.cookie_lifetime 重置为默认值)。

      【讨论】:

      • 我很想知道为什么我投了反对票。如果 PHPSESSID cookie 过期,则当前用户将失去他的会话。
      【解决方案5】:

      浏览器关闭时不能销毁会话!!!会话需要销毁服务器端指令。您可以将会话设置为在一段时间不活动后销毁。

      学习http://www.php.net/manual/en

      【讨论】:

      • 不,不是泛泛的建议,给出了答案,作为参考。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-15
      • 1970-01-01
      • 2018-12-13
      • 1970-01-01
      • 1970-01-01
      • 2011-03-11
      相关资源
      最近更新 更多