1

如果 SESSION 已过期,我有许多 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 站点上过期时,是否有更简单的方法来注销用户?

4

2 回答 2

2

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

<?php
session_start();
if(!isset($_SESSION['userid']) { 
    echo '<meta http-equiv="refresh" content="0; url=index.php">'; 
} 
?>
于 2012-05-05T07:05:16.353 回答
1

更新你的脚本如下:

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

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

于 2012-05-05T07:50:12.050 回答