0

以下是我认为正确编写的两个函数。

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

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

问题):

  1. 如何通过代码导致 403 错误?
  2. 如果我有多个异步 AJAX 请求同时运行,会导致 403 错误吗?(我确实一次触发了几个(最多 5 个)ajax 请求)
  3. 如果我想以 relative_path/action 而不是 relative_pat/action.php 的形式调用 AJAX 请求,是否必须在 .htaccess 中设置有关目录列表的内容?
  4. 403 可能是由我的会话到期引起的,对吧?

阿贾克斯:

    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 +"/";
            }
        }); 
    }

(蛋糕)PHP:

public function isLoggedIn() 
{
    $this->autoRender = false;
    return ( $this->Auth->user('username') != null );
}
4

2 回答 2

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。不幸的是,您必须避免使用其他技术进行会话固定,看这里 许多其他人也报告了这个问题(只是谷歌'ajax session_regenerate_id'),但我还没有找到解决方案。

于 2014-09-02T11:04:11.823 回答
2

1.通过代码可以得到403。从 CakePHP 文档 ( http://book.cakephp.org/2.0/en/core-libraries/components/authentication.html#handling-unauthenticated-requests ) 中查看这一点:

如果身份验证器返回 null,则 AuthComponent 将用户重定向到登录操作。如果它是一个 ajax 请求并且指定了 AuthComponent::$ajaxLogin ,则呈现该元素,否则返回 403 http 状态代码。

2.多次Ajax调用不应该是403错误的原因。

3.标准路由由CakePHP自己处理。如果你需要一些不同的路由,你应该在 routes.php 中配置它。我想说使用 .htaccess 仅用于非常极端的路由需求,应该是最后的手段。

4.是的,这可能是一个原因,因为您将不再登录,因此获得 Auth 403s(参见答案 #1)。

于 2013-09-05T15:03:15.123 回答