我使用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'));
}
也许我在用户识别中使用了错误的逻辑?
答案 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'));
}
}