2012-05-05 73 views
0

如果SESSION已过期,我仍有部分AJAX调用仍然部分工作。AJAX注销,如果会话已过期

例如:联系我们表单将加载,可以填充并显示为发送,但由于SESSION变量不存在,AJAX调用在后端失败。

我想成立一​​个通用的一块PHP来检查会话仍然存在,如:

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

但没有与这发生在地方。

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

因此,我假设我需要获得AJAX调用才能在会话中返回成功或失败,并从JQUERY重新执行导向。

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

THX

* UPDATE *

是页面已经加载。 AJAX调用是发送联系人请求的后页加载功能。因此,我认为header()是我从这里阅读的内容中找不到的。 header()会很好,因为它可能位于大型PHP脚本的顶部,并一般地响应设置会话的任何请求。

看起来我必须为使用会话的每个AJAX调用建立一个检查。可以使用通用函数。当会话在AJAX站点上过期时,是否有更简单的方式来记录用户?

+0

没有,实际上应该工作,除非你已经发送了一些输出。你有任何错误? –

+0

@Truth最有可能的是,如果他通过AJAX调用并获取了这些信息,那么他已经有了输出(AJAX调用需要输出),所以除非刷新页面,否则不能更改标题。 –

+0

这里的问题是这个代码发生的地方。 AJAX调用本身尚未发送输出,所以仍然有可能。亚当应该改写他的问题并更好地解释它。 –

回答

1

更新侑脚本folows:

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

:如果返回true,超过$ _SESSION [ '用户ID']是isset,否则不isset)

2

如果是AJAX调用,页面的标题已经发送,因此不能通过AJAX调用进行更改。相反,尝试元刷新到位头重定向:

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

太好了,这也适用,但我想知道是否在会话过期时使用'meta http-equiv = refresh'而不是头部来重定向时是否存在任何风险,优点或缺点。 – JohnA10