[PHP-users 21675]Re: session_cache_limiterの使い方

Yousuke Kawada ykawada @ marble-angel.com
2004年 5月 15日 (土) 16:38:19 JST


2度目の投稿のカワダです。

鈴木敏江 様
> PHPを使ってDB登録&閲覧系のシステムを構築しています。
> PHPのセッションとフォームデータをPOSTで受け渡した場合に、
> ブラウザの戻るボタンで戻ると「ページの有効期限切れ」の
> 警告が出てしまうのに悩んでいます。
|||
> ブラウザの「戻る」に対する有効期限の問題、
> 皆様はどのように対処なさっているのでしょうか??
> ぜひコツや解決法を教えてください。

難しい問題ですよね。
自分もどうにかならないかと、いろいろと調べた事があります。
正直、、絶対にコレだって言える解決策はわかりません。

が、いろんなサイトを調べた結果、見つけた方法があります。
※この方法が良い方法かどうかはわかりません。

【宮下酒造株式会社のショッピングカートの例】
http://www.msb.co.jp/
↑宣伝ではありませんよ。自分とは無関係です。

(普通の?)ショッピングカートに商品を追加したり、カート内で商品の数量を変
更したり削除したりした後にブラウザの戻るボタンを使うと「ページの有効期限
切れ」が表示されます。
しかし、この酒屋さんのショッピングカートではカートの中身を変更した後にブ
ラウザの戻るボタンを使用しても、「ページの有効期限切れ」が表示される
事はまずありません。

でこのサイトをじっくり見てみると、POSTデータを渡す先が、cart.php
ではなく、cart1.php になってました。
cart1.phpに渡してるのに、なんで、cart.phpが表示されるの?ってその時は全
くわかりませんでしたが、自分なりにいろいろ考えてみたのが、

・履歴を消すJavaScriptを使う方法
http://www.akane.sakura.ne.jp/~nss/javascript/bno/102.txt

これを使ってcart1.phpに処理だけさせて、処理を終えるとcart.phpへcart1.php
の履歴を残さず移動するっていう具合です。
実際にサンプルを作ってみたら、「ページの有効期限切れ」も表示されなくなり、
なんとなく、それっぽい動作をしましたが、何か違うんです。
動作の違いはこんな感じです。

【JavaScriptを使用した場合】※カートに商品が2つ以上あるとします。
 商品ページ → <cart1.php>(商品追加) → cart.php → <cart1.php>(商品削
除) → cart.php →  <cart1.php>(商品削除) → cart.php
この時、<cart1.php>の履歴は残りません。戻り先は、それぞれの<cart1.php>の
前のページになります。

【宮下酒造株式会社の場合】※カートに商品が2つ以上あるとします。
 商品ページ → <cart1.php>(商品追加) → cart.php → <cart1.php>(商品削
除) → cart.php →  <cart1.php>(商品削除) → cart.php
この場合、カート内で何度操作をしても戻り先は商品ページになります。

つまり、このサイトではJavaScirptで履歴を消す方法はとっていないという事に
なります。

で、このサイトと同じ動作をさせるにはどうすればいいのか考えてみたら、どう
やら、答えはPHPのheader関数だという事がわかりました。
処理用のPHP(cart1.php)にheader(Location:表示用PHPのアドレス)を記述するだ
けでこのサイトと同じ動作をしてくれました。
処理用PHP(header関数で)→表示用PHP。という事です。

どっちの方法も、PHPのプログラムとして”良い方法なのかそうでないのか”は
わかりません。ただ、どちらの方法も「ページの有効期限切れ」が表示されなく
なるのは確かです。

 あと、もう一つ、これは本屋で立読みをした程度ですので、よくわかりません
が、「実例で身につける! MySQL × PHPによる本格Web-DBシステム入門」
という本の中に戻るボタン対策が書いてあったと思います。セッションを使って
送信済みかそうでないかを判断するようなプログラムだったと思いますが、詳し
く覚えていません。ぜひ、本をご覧になってみてください。

かなり長ったらくして、わかりくい文章ですが、お許しください。
これから、もっとがんばります。

それでは失礼いたします。

-- 
Yousuke Kawada <ykawada @ marble-angel.com>
URL : http://www.marble-angel.com/




PHP-users メーリングリストの案内