您好我正在通过使用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部分中显示的登录页面。我不确定是否需要任何其他类型的重定向。
答案 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”。