在指定时间后转到注销页面 - 由于使用 AJAX 调用的标头命令而出现问题


go to logout page after specified time - issue because of header command called with ajax

我正在使用php/ajax中的api,并且我在每个页面中都包含测试用户是否由于一段时间后不活动而未注销。它有效,但在某些时候我遇到了麻烦。故事是这样的:

我有一个名为索引.php的文件。索引.php有一个div - 让我们将其命名为"div"。它还有一些按钮 - 让我们将其命名为"新建"和"修改"。当我按下按钮时,文件new.php和modify.php的正文通过ajax方法加载到"div"。目前为止,一切都好。但是当用户在一段时间内处于非活动状态时,它应该注销他。确实如此。但不幸的是 - 很明显为什么会发生这种情况 - 注销页面没有打印到 index.php 中,而是打印到"div"的正文中。这很容易理解 - 按"新"按钮将我移动到新.php。New.php 检查我是否已登录 - 我不是,所以它会将我重定向到 logout.page 如此新.php是生成的注销页面,它成为我的"div"的主体。这是一个问题:如果我注销并且没有在div 中打印它,如何将整个页面(索引.php(重定向到注销页面。请记住,按"新建"按钮不会刷新索引.php因为我使用 ajax。它只会刷新我的div。甚至可能吗?

不要在new.php中执行重定向,而是在用户注销时使该 PHP 脚本返回一些特定值,在 AJAX 调用中分析该输出,并在必要时通过 javascript 进行重定向。

换句话说:

  • 如果new.php成功了,就做你平时做的事情
  • 如果new.php返回一些"身份验证失败"状态,请执行重定向

最好的方法是将 AJAX 响应封装在 JSON 对象中,这样您就可以同时拥有数据和响应代码,以便更轻松地在 javascript 端进行分析。

使用javascript重定向怎么样?你真的不需要关心"黑客"用户,因为他们没有登录就没有任何权限,所以只需通过以下方式重定向普通用户:

<script language="JavaScript">document.location="/logout.php";</script>

试试这个 - 将"3000"更改为任意毫秒数(例如,如果是 15 分钟,则将其设置为"900000"(

<script>
(function(){
  setTimeout( function(){
      window.location = "www.yourawesomesite.com/logout";
    }
  ,3000)
})();
</script>