1

我使用我的 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'));
}

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

4

1 回答 1

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'));    
    } 
}
于 2012-10-09T07:20:47.640 回答