如果会话已过期,则注销 AJAX


AJAX Logout if Session has Expired

如果会话已过期,我有许多 AJAX 调用仍然部分有效。

例如:将加载"联系我们"表单,可以填写并似乎已发送,但 AJAX 调用在后端失败,因为 SESSION 变量不存在。

我想设置一个通用的 PHP 片段来检查会话仍然存在,如下所示:

 session_start();     
 <?php if(!isset($_SESSION['userid']) {header('Location: index.php');}?>

但是,这没有任何反应。

我假设 header(( 仅在页面加载时有效 - 这是正确的吗?

因此,我假设我需要获取 AJAX 调用以返回会话上的成功或失败,并从 JQUERY 进行重定向。

这是最好的方法吗?header(( 可以在 AJAX 调用上重定向吗?有没有另一种方法可以让重定向从 AJAX PHP 调用工作?

感谢

*更新*

是的,页面已经加载。AJAX 调用是发送联系人请求的页面加载后函数。因此,我认为 header(( 与我在这里阅读的内容不符。header(( 会很好,因为它可以位于大型 PHP 脚本的顶部,并且通常响应设置会话的任何请求。

看起来我必须为使用该会话的每个 AJAX 调用构建一个签入。 可以使用泛型函数。当 AJAX 站点上的会话过期时,是否有更简单的方法将用户注销?

如果是 AJAX 调用,

则页面的标头已发送,因此无法通过 AJAX 调用进行更改。 相反,请尝试元刷新来代替标头重定向:

<?php
session_start();
if(!isset($_SESSION['userid']) { 
    echo '<meta http-equiv="refresh" content="0; url=index.php">'; 
} 
?>

将 yor 脚本更新为 folows:

<?php
session_start();
if(!isset($_SESSION['userid']) {
  echo 'true';
} else echo 'false';
?>

在jQuery检查中:如果返回true,则$_SESSION['userid']是isset,否则不是isset(