PHPプログラムに関する各種メモ書き

IEやEdgeでhistory.back()や「戻る」ボタンで戻った時に消える時の対処法その1

IEやEdgeでhistory.back()や「戻る」ボタンで戻った時に消える時の対処法

PHPでセッションの使用 session_start(); を実行すると、ブラウザのHTTPヘッダには

Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache

というのが必ず送られます。
これが送られるとそのページはキャッシュされないので、例えばフォーム入力画面の場合
次の確認画面から history.back(); で返ってくると、入力欄が消えてしまいます。
(ただし Google Chrome の場合は消えない場合が多いので、必ずIEやEdgeで確認しましょう。)

そこで 次の方法で対処できます。

● 方法1. php ソースに次の3行を記述する

session_start();

// セッション使用時にブラウザキャッシュを有効にする
header('Expires: -1');
header('Cache-Control:');
header('Pragma:');

記述場所は 「session_start() の後」かつ「何か画面に出力する前」です。

● 方法2.

session_cache_limiter('public'); // セッション使用時にキャッシュを使えるようにする
// ↓PHPのデフォルト値は 180 です
session_cache_expire(60); // セッション時のキャッシュ有効時間 60分(1時間)
session_start();

とすると、セッション使用時にもキャッシュ可能になります。

・session_cache_limiterの引数

session_cache_limiterの引数 説明
none no-cacheヘッダを送信しない
nocache no-cacheヘッダを送信する
private キャッシュを利用する(プロキシサーバーにはキャッシュを利用させない)
private_no_expire キャッシュを利用する(プロキシサーバーにはキャッシュを利用させない)
public キャッシュを利用する

ちなみにセッション自体の有効時間は

ini_set("session.cookie_lifetime", 28800); // セッション有効時間 60*60*8(8時間)

として指定します。

関連エントリー

No.680
11/25 00:41

edit

Cookie
セッション
エラー対処