CakePHP中的丢失Auth会话Jquery Ajax调用

时间:2012-10-09 06:40:53

标签: jquery ajax session cakephp authentication

我使用CakePHP应用程序频繁进行Jquery Ajax调用(post,load)。通常将内容加载到div中,内容与登录用户相关。

我使用默认的表单身份验证,并在AppController中定义登录用户:

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

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

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'));
}

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

1 个答案:

答案 0 :(得分:0)

在你的函数中测试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'));    
    } 
}