403错误背后的常见原因

时间:2013-09-05 12:31:44

标签: php ajax cakephp http-status-code-403

以下是我正面写的两个函数。

问题是,有时候,当我的Session没有超时,但是AJAX请求返回403错误(在没有任何模式的情况下也会发生其他一些函数)。

堆栈溢出充满了问题请求帮助的问题,但我没有找到任何真正好的答案:

问题(S):

  1. 如何通过代码导致403错误?
  2. 如果我同时运行多个异步AJAX请求,是否会导致403错误? (我一次发射几个(最多5个)ajax请求)
  3. 如果我想以relative_path / action而不是relative_pat / action.php的形式调用AJAX请求,是否必须在.htaccess中设置目录列表?
  4. 我的会议到期可能会导致
  5. 403,对吗?
  6. 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 );
    }
    

2 个答案:

答案 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)。