2010-05-15 99 views
20

可能重复:
How do I expire a PHP session after 30 minutes?销毁或取消会话时,用户关闭浏览器不点击注销

我摧毁logout.php所有会话var和调用它,当用户点击在注销时,用户不会点击logout.php,而是直接关闭浏览器。我怎样才能删除会话呢?

+3

Duplicates:http://stackoverflow.com/questions/2201750/php-destroy-session-on-close-of-main-window,http://stackoverflow.com/questions/2171821/how-do-i -make-my-site-automatically-sign-out-a-user-when-they-close-their-browser,http://stackoverflow.com/questions/959655/destroy-session-on-window-close等等:http://stackoverflow.com/search?q=php+session+browser+close – 2010-05-15 11:56:00

+1

感谢您的答复,在哪里以及什么是会话超时的语法。 – nectar 2010-05-15 11:56:28

+0

另请参阅:http://stackoverflow.com/questions/887919,http://stackoverflow.com/questions/520237和http://stackoverflow.com/questions/508959 – Gumbo 2010-05-15 12:17:15

回答

13

您可以设置过期时间会话数据,每个session_start通话测试,并摧毁了会议,如果它过期:

session_start(); 
if (!isset($_SESSION['EXPIRES']) || $_SESSION['EXPIRES'] < time()+3600) { 
    session_destroy(); 
    $_SESSION = array(); 
} 
$_SESSION['EXPIRES'] = time() + 3600; 
+2

这是一个有点尴尬的解决方案,你不觉得吗?有一个内置的功能! – 2010-05-15 11:59:48

+1

$ _SESSION ['EXPIRES'] ....'EXPIRES'是特定的,或者我可以将我的会话var名称? – nectar 2010-05-15 12:01:17

+0

@GuidoH:你应该更好地检查session_cache_expire实际上做了什么。 – Gumbo 2010-05-15 12:04:09

12

你不能。但是,会话cookie通常在没有过期时间的情况下发送,这意味着在浏览器关闭时它们被删除,因此会话丢失。

+0

是否有一些新闻要避免这个问题? – neoDev 2015-03-08 12:17:33

1

会话可以设置为简单地到期服务器不听从客户经过一段时间后。这就是你要寻找在当浏览器窗口关闭提供您不要修改会话cookie过期时间

3

PHP会议应自动失效的方向......

马丁。如果这没有发生,那么我会假设你已经以某种方式修改了这个,我们需要更多的细节来协助。

1

如果您没有为会话cookie设置过期时间,当用户关闭浏览器时,它将被删除,对于大多数实际用途(除非您担心存储或安全性),该浏览器具有相同的效果。如果这还不够好,您可以将会话设置为非常快到期,并定期通过AJAX进行刷新。

相关问题