jQuery Mobileで確認画面付のフォームでSessionが消える問題 ITかあさん

ITかあさん

jQuery Mobileで確認画面付のフォームでSessionが消える問題

今日もSessionと戦っています。(このところSessionに関する問題が多いな・・)

相変わらずCakePHPですが、今回は404エラーも一切なく、セキュリティーレベルの問題も問題なく、むしろform内でのみSessionが切れる問題です。

唯一今までと違ったのはCakePHP×jQuerymobileを使った、確認画面付メールフォームということでした。

確認画面で切れるSession

通常確認画面付のメールフォームはどう作るでしょう?

Sessionに確認画面で代入しますが、今回はそれがうまくいきませんでした。
どうもformのaction先でSession保存されたように見えて、確認画面などで更新ボタンを押すとSessionが壊れるばかりか、フォームの確認画面で更新ボタンを押した時に、
フォームの再送信もされないようでした。

フォームでお馴染みのこのダイアログも出ない

jQuerymobileのJavascriptを一度外すと正常に処理されるので、jQuerymobile側の問題と断定は出来きました

formのAjaxを外してもダメ

試しにAjax遷移を外してダメでした。

 $(document).bind("mobileinit", function() {
		$.mobile.loadingMessage = '読み込み中です';
		$.mobile.pageLoadErrorMessage = '読み込みに失敗しました';
		$.mobile.page.prototype.options.backBtnText = "戻る";
		$.mobile.ajaxEnabled = false;
		$.mobile.ajaxFormsEnabled = false;
    });

解決方法

すごく考えたんですが、結局分かりませんでいた!

jQuerymobileが問題でSessionが切れることに気がついたのもかなり時間が経過したのですが、どうしたらjQuerymobileでページをまたいでSessionを維持するのかまではうまく実装できませんでした

ページをまたいで$_POSTを$_SESSIONに代入しない

いつも確認画面など、次のページのaction先でSessionに入れていたのですが、その処理を諦めました。

ページをまたいでからSessionに代入しなければ問題なく処理されたので、

formのaction先を自分自身にし、$_POSTが渡ってきたら$_SESSIONに代入して、確認画面にリダイレクトする

この方法で対応しました。

処理としては、悩んだわりにすごくシンプルですね。
Sessionに代入してから、確認画面にリダイレクトです。

if($_POST){
$_SESSION = $_POST;
$this->redirect('/individuals/chk/'.$district);//情報をPOSTしてからの画面遷
}

あまり釈然としないモヤモヤ感ですが、ページをまたがずにSession化してから次のページにいけば、問題なく実装できたので めでたしめでたしとします。

初夏のJavaScript祭 in サーキュレーションビル ForPro