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に代入しなければ問題なく処理されたので、
この方法で対応しました。
処理としては、悩んだわりにすごくシンプルですね。
Sessionに代入してから、確認画面にリダイレクトです。
if($_POST){ $_SESSION = $_POST; $this->redirect('/individuals/chk/'.$district);//情報をPOSTしてからの画面遷 }
あまり釈然としないモヤモヤ感ですが、ページをまたがずにSession化してから次のページにいけば、問題なく実装できたので めでたしめでたしとします。