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

时间:2012-05-05 07:00:00

标签: php ajax session

如果SESSION已过期,我有许多AJAX调用仍然可以部分工作。

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

我想设置一个通用的PHP来检查会话是否仍然存在,如:

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

但这没有任何反应。

我假设header()仅在页面加载时才起作用 - 这是正确的吗?

因此我假设我需要通过AJAX调用来返回会话的成功或失败,并从JQUERY重新定向。

这是最好的方法吗?可以在AJAX调用上重定向header()吗?还有另一种方法可以从AJAX PHP调用中获得重定向吗?

THX

*更新*

是的,页面已经加载。 AJAX调用是发送联系人请求的帖子页面加载功能。因此,我认为header()不是我在这里读到的。 header()本来不错,因为它可以位于大型PHP脚本的顶部,并且通常会响应任何设置会话的请求。

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

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

按如下方式更新yor脚本:

<?php
session_start();
if(!isset($_SESSION['userid']) {
  echo 'true';
} else echo 'false';
?>
在jQuery中检查:如果返回true,那么$ _SESSION ['userid']是isset,否则不是isset)