浏览器打开时PHP会话超时

时间:2012-06-07 12:09:04

标签: php session timeout

我知道有很多关于PHP会话的线程,而ajax查询等... 但我的问题是,

我有一个ajax网格(在页面加载后构建),我只允许在登录使用时进行编辑。我不介意在用户实际更改页面之前不会检查会话(然后调用valid_session.php), 但是我有一个问题,当第二天用户在同一页面上打开浏览器时 - 网格仍然可以编辑!很明显,如果我刷新页面,那么用户就会被注销。

我的网页上没有设置缓存,但浏览器(特别是chrome)不会在打开时重新加载。

我无法理解如何在重新打开时强制刷新。请引导我走向正确的方向......


修改

BTW - 我找到了解决这个问题的方法。我只需通过session_destroy();session_destroy.php上的unload()致电$.get()

$(window).unload(function() {
    $.get('session_destroy.php', function(data) {
      alert(data); // alerts me of some var set to 0 - meaning session is destroyed.
    });
});

2 个答案:

答案 0 :(得分:2)

要主动注销用户,我认为您应该进行某种轮询,然后在会话过期时自动触发注销。或者打印一条错误消息,例如“当会话已过期时,不会保存对此页面所做的更改”。 显然网格现在不能“通过魔法”会话已经过期,你必须以某种方式告诉它。在任何情况下,即使网格仍然可以编辑,也不可能保存更改,否则存在设计缺陷(比如在保存之前不检查用户是否已登录)

答案 1 :(得分:1)

一种解决方案是设置“最后刷新”的cookie,并使用javascript setInterval()检查cookie是否早于20分钟。如果是,则javascript触发刷新。当然,您仍需要在不活动期后将其注销。