dポイントプレゼントキャンペーン実施中!

php+mysqlで会員制のサイトを作っており、
javascriptも使っているのですが、
行き詰ってしまいましたので、助けてください。

投稿をインプット→確認→データ登録→終了
のように処理させているのですが、
ブラウザの"戻る"ボタンを押すと、不都合が生じるので、
投稿のページの履歴を残さないようにしたいと思います。

そのためにlocation.replaceを使えば、履歴を残さず、
次のページに進むことができるのですが、
フォームのデータを次のページに渡すことができません。

すみませんが、
履歴を残さずに、フォームデータを次のページに渡す方法を、
教えていただけないででょうか。

A 回答 (4件)

> ブラウザの"戻る"ボタンを押すと、不都合が生じるので、


まずはこの不都合をなくすところから始めるべきだと思います。

> フォームとセッションを同時に使うのは邪道なのでしょうか?
邪道も何も、セッションを使うかフォームの<input type="hidden">に押し込むかのどちらかしかありません。
フォームをシンプルにするならセッション(クッキー)一択ですね。
たとえば、このOKWave(教えてGoo)でも、セッションを使ってログイン状態を保ち、
フォームを使って投稿内容を処理しています。

> 履歴を残さずに、フォームデータを次のページに渡す方法を、
JavaScriptを使って良いなら(というかlocation.replaceはJavaScript前提ですが)
window.openや<IFRAME>にデータを送信して、セッション情報を更新、
window.openerやwindow.parentをlocation.replaceで読み直したときに、サーバーはセッション情報から表示すべきデータを取得、HTMLに出力できます。
(説明下手ですね。すみません)

いわゆるAjaxを使えば、画面の遷移が完全に無くなるページが出来ます。
(いろいろ面倒なので、あまりおすすめはしません)
    • good
    • 0

がるです。


手厳しい意見で大変に恐縮ではあるのですが。

> データをフォームとセッションに分けて、次ページに引き渡しているため、
> 戻るボタンを押した場合、フォームのデータは問題ないのですが、セッションのデータが最新のままで戻ってしまい、予期せぬ動きになってしまいます。
こういった状況の場合、例えば「悪意ある人間からのアクセス」によって、意図しない動きや、平たく言って脆弱性となりうるモノが発生しえるかと。

> フォームとセッションを同時に使うのは邪道なのでしょうか?
フォームとセッションは粒度の違うものなので、同時に使うのは別によいと思うのですが、
> データをフォームとセッションに分けて、次ページに引き渡し
というのはあまり好ましくないかと。何ゆえに「全データをセッションに保存しておく」ではまずいのでしょうか?
データを「複数種類の挙動の違う場所へ格納する」事は、よほど設計に気をつけないと、用意に齟齬を生んでしまうものなので。

多分、そのあたりの基礎設計を一度見直されるとよろしいかと思います。

この回答への補足

No.3さんのご回答と合わせて、返事させていただきます。

ページ間で引渡している変数を整理してみたのですが、
この部分の設定がまずかったようなので、次のように、改善してみたいと思います。

               現状        改善案
表示画面のパラメータ GET
ログイン管理      セッション
ページ履歴管理    セッション -> GET
入力フォーム      POST
入力チェック用フラグ セッション -> POST

これで、まずい点等ある場合、ご教授いただけるとありがたいです。

補足日時:2006/08/03 14:12
    • good
    • 0
この回答へのお礼

この、補足のところに書いた方法で、うまくいきました。

皆様、ありがとうございました。

お礼日時:2006/08/14 14:18

がると申します。


大変に厳しい内容で恐縮ではあるのですが。
> ブラウザの"戻る"ボタンを押すと、不都合が生じるので、
の部分の「不都合」をきちんと修復すべきです。
そうしないと、予想外の不具合や攻撃に見舞われますので。

この回答への補足

ご回答ありがとうございます。

おっしゃるように、その不都合が解消できればいいのですが、
データをフォームとセッションに分けて、次ページに引き渡しているため、
戻るボタンを押した場合、フォームのデータは問題ないのですが、セッションのデータが最新のままで戻ってしまい、予期せぬ動きになってしまいます。

フォームとセッションを同時に使うのは邪道なのでしょうか?
(phpの質問になってしまいますが。。。)

補足日時:2006/08/02 17:58
    • good
    • 0

onSubmitでイベントをハンドルします。



そこでURLを、
xxx.php?xxx=yyy&zzz=aaa
という形の、ちょうど、GETで、取得するような形にします。

そして、リプレースすれば完璧です。

この回答への補足

ご回答ありがとうございます。

すみません、できれば、POSTで処理したいのですが。。。

絶対にPOSTじゃないとだめというわけでもないのですが、
なんとかならないでしょうか?

補足日時:2006/08/02 17:55
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!