ブラウザの戻るボタンを押すと有効期限切れになってしまう

Webページを作成していると、ブラウザバック(ブラウザの戻るボタン押下)時に有効期限切れのメッセージが表示される事があります。今回はこの事象についてまとめてみようと思います。

何故「ページの有効期限切れ」対策が必要なのか?

そもそも何故、ページの有効期限切れ対策が必要となるのでしょうか?
正直、個人的にはブラウザによるセキュリティ対策で個人情報をキャッシュさせない為の制御なので、ブラウザ仕様になるのでAP側では対処不要と考えています。
それでも業務用APなどではクライアント側が納得してくれないケースも多いと思われます。それは何故でしょうか?

  • まず、格好と見栄えが悪い。
  • 戻るボタンを押したのだから、当然直前の入力画面へ戻るだろうと勝手に思い込んでいる。
  • ユーザから見れば意味不明の画面が表示されているので、何か異常があったのかと思う。

大体、こんなところでしょうか。

「ページの有効期限切れ」が発生する原因

  1. POSTでパラメータ送信している
  2. SESSIONを使用している
  3. 上記を使用しているページへ戻ろうとしてブラウザの「戻る」ボタンを押下した

ブラウザ側では「ページの有効期限切れ」を表示する際、どこをチェックするのか

多くのブラウザではページ有効期限を確認する際、以下の「HTTPヘッダー」の設定値を確認します。

  • Last-Modified:最終更新日
  • Expires:有効期限
  • pragma :HTTP1.0仕様に基づくデータのキャシュ制御オプション
  • Cache-Control:HTTP1.1仕様に基づくデータのキャシュ制御オプション

ページの有効期限切れが発生した場合、まずHTTPヘッダーの設定値が現在どうなっているか確認して下さい。

対策

クライアント側

  • 有効期限切れが表示されたらF5キー押下やブラウザのページ再読みなどでページをリロードしてもらう
  • 恐らくこれがAP側の対応も不要になるので一番手っ取り早い対処方法です。

サーバ(AP)側

  • ブラウザの戻るボタンを無効又は非表示にしてしまう。
  • 仮に有効期限切れの事象を回避出来てたとしても、DB更新後にブラウザバックされた場合など、ブラウザバックによって他にも問題が出てくる可能性が高いと思われます。AP側で一番良い対処法と思われるのはブラウザの戻るボタンがユーザの目立つ位置に見えているからつい押下してしまうので、戻るボタンを無効化又は非表示にしてしまうことが一番確実な対処方法と思われます。但しクライアントが納得すればの話ですが。

  • POSTではなくGETを使用する。
  • ブラウザではPOSTは警告を出力しますが、GETではそのまま画面遷移します。但し、POST時にパスワードなどの個人情報や大量のデータを送信している場合はオススメしません。

  • HTTPヘッダーの設定値を見直す。
  • HTTPヘッダーの設定値を変更する事で、ブラウザ側の有効期限チェックを回避する事が出来ます。