【问题标题】:How to unset session on close page如何在关闭页面上取消设置会话
【发布时间】:2014-01-03 22:28:32
【问题描述】:

使用jQuery 或其他方法,我如何才能仅在访问者关闭页面时取消设置会话

unset($_SESSION['foo']);

我知道在 Javascript 中检测这种东西的唯一方法是 onunloadonbeforeunload 事件

那么我如何在关闭页面时将其应用于取消设置$_SESSION['foo']

但是如果访问者关闭页面,我为什么要取消会话?

我将把它应用到我基于观看 youtube 视频的简单网站中 防止访客多次打开watching.php 所以我会强迫他们先关闭它,然后再调用新视频观看 所以我的想法是放弃会话,如果找到将打印错误消息 但问题是如何释放这个会话,所以我需要js 的帮助才能做到这一点 在页面watching.php

非常感谢

【问题讨论】:

  • 看起来这对服务器来说太密集了。类似于长轮询!
  • 为了您的健康,不要评论说“如果用户禁用了 javascript”:)
  • ^ 那也不错! :P 我没想到!
  • @larssy1 不,当页面关闭时,PHP 会话不会自动销毁,这是不可能的。 可能被丢弃的是客户端的会话cookie,但服务器端的会话数据会保留一段时间。但即使是浏览器的 cookie 保留政策也在发生变化。
  • @PraveenKumar 我正在测试它

标签: javascript php jquery session


【解决方案1】:

看起来这对服务器来说太密集了。类似于长轮询的东西!此外,当窗口关闭时,PHP 会话会自动销毁。但是,如果您坚持,您可以通过这种方式使用诸如在事件onbeforeunload 中附加 AJAX 调用之类的方法:

$(window).on('beforeunload', function(){
    $.getScript("killsession.php");
});

这会在窗口关闭之前获取 JavaScript,在您的 killsession.php 中,您可以使用 sleep() 延迟并取消设置会话。您的代码将如下所示:

<?php
    unset($_SESSION)
    session_destroy();
    sleep(5);
?>

让我再次警告你,这确实是一种糟糕的做法并且会消耗服务器周期!!!

【讨论】:

  • 非常感谢,它运行良好,我真正理解您警告我并指导我采用最佳和安全的方法,但由于我的网站简单,它不会伤害服务器..再次感谢跨度>
  • 欢迎您,乐于助人! :)
猜你喜欢
  • 1970-01-01
  • 2012-11-10
  • 2011-11-14
  • 2012-06-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多