【问题标题】:PHP session time out on browser openPHP会话在浏览器打开时超时
【发布时间】:2012-06-07 12:09:03
【问题描述】:

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

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

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

我不知道如何强制它在重新打开时刷新。请指导我正确的方向...


编辑

顺便说一句 - 我找到了一种方法来处理这个问题。我只是通过$.get()unload()上的session_destroy.php中调用session_destroy();

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

【问题讨论】:

  • 当您说用户在同一页面上打开浏览器时,这是如何实现的?是书签吗?默认主页?固定标签?
  • 你知道你可以设置 - 用相同的标签重新打开吗?

标签: php session timeout


【解决方案1】:

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

【讨论】:

  • 但这就是我的观点——我不介意在窗口打开时网格保持可编辑状态。但是一旦它关闭 - 在打开时我希望它重新加载,所以它不可编辑。或者 - 你是说这是不可能的,我必须事先注销用户?
【解决方案2】:

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

【讨论】:

  • 但这意味着用户可能会丢失所有未保存的更改,对吧?
  • @Elen 您可以告诉用户会话已过期并且未保存的更改丢失,这是礼貌的方式,用户不会感到太多不适。
  • 如果他们关闭浏览器或在 20 分钟内没有更改任何内容,他们可能不会丢失任何未保存的工作。您还可以让setInterval() 将“上次刷新”cookie 重置为当前时间,这意味着只有在浏览器关闭 20 分钟时才会超时。
  • 好的理解...我要么必须在加载网格之前使用$.get() 来检查会话,要么使用setInterval() 来检查js cookie...
  • @Elen 这是你的选择。我会检查 cookie。
猜你喜欢
  • 2018-09-19
  • 1970-01-01
  • 1970-01-01
  • 2017-07-26
  • 2023-03-12
  • 1970-01-01
  • 2017-01-27
  • 2015-08-12
  • 1970-01-01
相关资源
最近更新 更多