CakePHP 2.3.7 を使用しています。
セッションからデータを正常に取得していないコントローラーで ajax を介して呼び出されるメソッドがあります。私は次のことをしています。
ajax 呼び出しから DOM に挿入されるアドレス フォームがあります。ユーザーが無効なデータを含むフォームを送信しました。Address モデルからエラーと値を取得し、データを要求して、次のようにセッションに書き込みます。
public function index() {
//On form validation fail
$errors = $this->Address->validationErrors;
$data = $this->request->data;
$this->Session->write('Address', array('errors' => $errors,
'data' => $data));
}
健全性チェックを実行して、セッション内にあることを確認します。
var_dump($this->Session->read('Address'));
ページがリロードされ、JS が次の ajax メソッドを起動します。
$.ajax({
url: '/orders/getAddress.html',
data: {"country" : country, "shipping" : shippingOption},
dataType: 'html',
cache: false,
success: function(data){
//data is the address form html
}
});
コントローラの getAddress:
public function getAddress()
{
if($this->request->is('ajax')){
//Gather up data to create html form and put into an array
$data = array('states' => $states, etc...);
//Check for errors and values in session
if($this->Session->check('Address') == true){
$data['errors'] = $this->Session->read('Address.errors');
$data['values'] = $this->Session->read('Address.data');
}
$this->set(compact('data'));
$this->layout = 'ajax';
}
}
ほとんどの場合、getAddress() が ajax 経由で起動すると、フォームはレンダリングされますが、セッションは空で、エラーと値は使用できなくなります。一貫して再現可能ではないため、少し気が狂いました。データがビューに表示されることもあれば、表示されないこともあります。セッション設定を少しいじってみました。
Configure::write('Session', array(
'defaults' => 'database',
'checkAgent' => false,
'ini', array('session.cookie_secure' => false, 'session.referer_check' => false)
));
パラメータを追加しました
'session.cookie_httponly' => false
私の開発環境では少し成功しましたが、本番環境では、ajax 呼び出しのセッションでデータがまだ失われています。
私はロープの終わりにいます!提案をいただければ幸いです。