在ajax / json调用的会话到期后重定向

时间:2010-10-19 19:13:15

标签: php ajax json session

您好我正在通过使用JQuery库的getJSON方法将一段值发送到从数据库中获取数据的PHP函数来从数据库获取数据。然后将数据放入name:value对数组中,并进行json编码并返回/回显。这将有助于jQuery使用数据库中的数据填充所需的HTML元素。这对我来说很好。

我的问题是在用户未登录或会话过期时进行登录重定向。我正在使用cakePHP,所以我使用他们的Auth组件检查用户是否登录

if(isset($this->Auth->User('id')))
{
//do reqd
}
else
{
$this->Session->setFlash(__('Session Expired.', true));
$this->redirect(array('controller'=>'users','action' => 'login'),null,true);
}

当会话过期时,登录页面实际上在json响应中显示为html,而不是整个页面被重定向。我知道它将作为json响应而来,因为我可以看到firebug控制台应用程序的HTML部分中显示的登录页面。我不确定是否需要任何其他类型的重定向。

2 个答案:

答案 0 :(得分:1)

不确定如何在Cake中专门执行此操作,但一般方法是查找HTTP标头,该标头通常由浏览器在使用XHR时发送:

X-Requested-With: XMLHttpRequest

答案 1 :(得分:1)

我发现管理它的唯一方法是在服务器端,如果会话过期,我没有启动AJAX请求但返回一个规范化的JSON对象来说明会话已过期并通过客户端管理重定向AJAX。

服务器:

// If $_SESSION expired
echo json_encode(new array("session" => "expired"));
exit(0);

客户端:

success: function(data) { if(data && data.session) { /* Session expired */ } }

Whitout这样做,如果dataType设置为JSON,请求将失败并转到错误回调,并显示错误“无效的JSON”。