1

CakePHP アプリで頻繁に Jquery Ajax 呼び出し (ポスト、ロード) を行いました。通常、コンテンツは div にロードされ、コンテンツはログインしているユーザーに関連付けられます。

デフォルトのフォーム認証を使用し、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 に答える