以下是我正面写的两个函数。
问题是,有时候,当我的Session没有超时,但是AJAX请求返回403错误(在没有任何模式的情况下也会发生其他一些函数)。
堆栈溢出充满了问题请求帮助的问题,但我没有找到任何真正好的答案:
问题(S):
AJAX:
var root = "/test_tool";
function isLoggedIn()
{
// return if the user is in the sign in window
if ( window.location == "http://localhost" + root +"/" )
{
return;
}
var output = "";
$.ajax (
{
url: root + "/users/isLoggedIn",
context: document.body,
async: true
} ).done( function( result )
{
output = result;
if ( output == "" )
{
alert( " You have been logged out. " );
window.location = "http://localhost" + root +"/";
}
});
}
(CAKE)PHP:
public function isLoggedIn()
{
$this->autoRender = false;
return ( $this->Auth->user('username') != null );
}
答案 0 :(得分:3)
我知道这个问题有点旧,但我遇到了同样的问题。 在我的情况下,问题是由session_regenerate_id引起的,所以为了避免它,我在我的app / Config / core.php中使用了以下代码:
Configure::write('Session', array(
'defaults' => 'php',
'timeout' => 480, // The session will timeout after 8 hours of inactivity
'cookieTimeout' => 480, // The session cookie will live for at most 8 hours, this does not effect session timeouts
'checkAgent' => false,
'autoRegenerate' => false, // causes the session expiration time to reset on each page load, but also causes 403 errors on ajax requests, therefore disabled
));
我只是设置了' autoRegenerate'参数为false。不幸的是,您必须避免使用其他技术进行会话固定,look here 许多其他人也报告了这个问题(只是google' ajax session_regenerate_id'),但我还没有找到解决方案。
答案 1 :(得分:2)
1.可以获得403通过代码。从CakePHP文档(http://book.cakephp.org/2.0/en/core-libraries/components/authentication.html#handling-unauthenticated-requests)中查看:
如果authenticator返回null,则AuthComponent会将用户重定向到登录操作。如果它是一个ajax请求并且指定了AuthComponent :: $ ajaxLogin,则返回该元素,否则返回403 http状态代码。
2.多个Ajax调用不应该是403错误的原因。
3.标准路由由CakePHP本身处理。如果您需要一些不同的路由,则应在routes.php中进行配置。我会说使用.htaccess仅用于极端的路由需求,应该是最后的手段。
4.这可能是一个原因,因为你将不再登录,因此获得Auth 403s(见答案#1)。