【问题标题】:Lost Auth sessions in CakePHP Jquery Ajax callsCakePHP Jquery Ajax 调用中丢失的身份验证会话
【发布时间】:2012-09-29 10:33:48
【问题描述】:

我使用我的 CakePHP 应用程序进行了频繁的 Jquery Ajax 调用(发布、加载)。正常加载内容到div中,内容与登录的用户相关。

我使用默认的Form认证,并在AppController中定义了登录用户:

$this->aU = $this->User->findById($this->Auth->user('id'));

在此之后,我通常在带有 $this->aU 的控制器中使用登录用户,并且它在正常视图渲染中工作正常。 但是当我使用 ajax 和 setinterval 渲染视图时,20 次中有 1 次调用丢失了会话并且控制器重定向了请求,因为看不到登录的用户。

var interval = setInterval(function() {
  $('#alerts').load('<?php echo $this->Html->url('/users/alerts'); ?>');
}, 20000);

在 UsersController 警报操作中我使用这个:

public function alerts() {
  $this->layout = 'ajax';
  $user = $this->aU;
  $this->loadModel('Message');
  $unread_messages = $this->Message->find('count', array(
    'conditions' => array('receiver_user_id' => $user['User']['id'])
  ));
  $this->set(compact('user', 'unread_messages'));
}

也许我在用户识别中使用了错误的逻辑?

【问题讨论】:

    标签: jquery ajax session cakephp authentication


    【解决方案1】:

    在你的函数中测试 ajax 调用

    public function alerts() {    
        if($this->request->is('ajax')){ //or $this->RequestHandler->isAjax() if you're in cake 1.3
           $this->layout = 'ajax';
           $user = $this->aU;
           $this->loadModel('Message');
           $unread_messages = $this->Message->find('count', array(
             'conditions' => array('receiver_user_id' => $user['User']['id'])
           ));
          $this->set(compact('user', 'unread_messages'));    
        } 
    }
    

    【讨论】:

    • 嗨,Herod,这样的调用更稳定吗?我以前试过,我发现它是一样的。
    • 尝试调试 $this->Auth->user('User.id') 和 $this->Auth->user('id') 看看返回的值是多少。我猜一个应该没问题一个应该为空
    • 我现在又试了一次,只有 $this->Auth->user('id') 没问题。看来这个 Auth 用户数组“有时”是空的。 20 年 1 次。
    • 你的 beforeFilter 回调是什么样的?
    • AppController 的 beforeFilter 在我的问题中是 UsersController's: parent::beforeFilter(); $this->Auth->allow('add', 'login', 'logout', 'activate');
    猜你喜欢
    • 1970-01-01
    • 2017-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-08
    • 1970-01-01
    • 1970-01-01
    • 2018-05-10
    相关资源
    最近更新 更多