当用户关闭浏览器而不单击注销时销毁或取消设置会话[重复]
Posted
技术标签:
【中文标题】当用户关闭浏览器而不单击注销时销毁或取消设置会话[重复]【英文标题】:Destroy or unset session when user close the browser without clicking on logout [duplicate] 【发布时间】:2011-02-19 20:45:47 【问题描述】:可能重复:How do I expire a php session after 30 minutes?
我正在销毁 logout.php 中的所有会话 var 并在用户单击注销时调用它,什么是用户不单击 logout.php 而是直接关闭浏览器。那我怎么删除会话???
【问题讨论】:
重复:***.com/questions/2201750/…,***.com/questions/2171821/…,***.com/questions/959655/… 和更多:***.com/search?q=php+session+browser+close 感谢您的回复,会话超时的语法在哪里以及是什么。 另见:***.com/questions/887919、***.com/questions/520237 和 ***.com/questions/508959 【参考方案1】:您可以为会话数据设置过期时间,使用每个session_start
调用对其进行测试,如果会话过期则销毁会话:
session_start();
if (!isset($_SESSION['EXPIRES']) || $_SESSION['EXPIRES'] < time()+3600)
session_destroy();
$_SESSION = array();
$_SESSION['EXPIRES'] = time() + 3600;
【讨论】:
这是一个有点尴尬的解决方案,你不觉得吗?有一个内置函数! $_SESSION['EXPIRES'] ....'EXPIRES' 是特定的,或者我可以放置我的会话变量名称?? @GuidoH:您最好检查一下session_cache_expire
的实际作用。
好的,但是如何启动会话,因为浏览器已关闭,因此会话 cookie(即会话 cookie)现在在客户端上被销毁?
这个答案没有解决OP的问题。问题是:如何在关闭浏览器时销毁会话,而不是在延迟后销毁会话。【参考方案2】:
你不能。但是,会话 cookie 通常在没有过期时间的情况下发送,这意味着它们会在浏览器关闭时被删除,因此会话无论如何都会丢失。
【讨论】:
有什么消息可以避免这个问题吗?【参考方案3】:如果您不修改会话 Cookie 的到期时间,则 PHP 会话应在浏览器窗口关闭时自动到期。如果没有发生这种情况,那么我会假设您已经以某种方式对此进行了修改,我们需要更多详细信息来提供帮助。
【讨论】:
【参考方案4】:可以将会话设置为简单地过期,服务器在一段时间后不会收到客户端的消息。这就是你要寻找的方向......
马丁
【讨论】:
【参考方案5】:如果您没有为会话 cookie 设置过期时间,它将在用户关闭浏览器时被删除,这对于大多数实际用途具有相同的效果(除非您担心存储或安全性)。如果这还不够好,您可以将会话设置为很快过期并通过 AJAX 定期刷新它们。
【讨论】:
以上是关于当用户关闭浏览器而不单击注销时销毁或取消设置会话[重复]的主要内容,如果未能解决你的问题,请参考以下文章