掲示板を運用しているのですが、

コメントを書き込んで確認画面を出した後、
IEの戻るボタンでページを戻ると、
「Web ページの有効期限が切れています」と表示されて
書き込んだ内容が全て消えてしまいます。

ヤフー知恵袋でも同様の現象が起こるのですが、
http://chiebukuro.yahoo.co.jp/

例えば、この人力検索はてなのように
ブラウザのbackボタンで戻っても
書き込んだ内容がそのまま残る掲示板もあります。

うちの掲示板もbackボタンで戻っても
書き込んだ内容がそのまま残るようにしたいのですが、
どのような対策が必要になるのでしょうか?

なお、掲示板はPHP+MySQLで運用しています。
よろしくお願いいたします。

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2013/09/18 20:45:03

ベストアンサー

id:windofjuly No.1

回答回数2625ベストアンサー獲得回数1149

二重投稿などの意図せぬ投稿を防ぐための手段として、
WEB製作者がキャッシュを持たせないような施策をしていたりすると、
『Web ページの有効期限が切れています』となります。
(ブラウザによって文言は変わります。)

困ったことに人力検索は有効期限による施策を用いていないため、
同じ質問を二つも三つもしてしまう人がいます…。
無料質問導入前には多重投稿防止策がこうじられていたはずなのですが、
今は未対応になってシステム的には逆行してますね…。


さて、phpの場合ですが、
設定確認や変更は session_cache_limiter で行います。

設定対象有効期間の有無
nocache(デフォルト)キャッシュを許可しない-
publicクライアント及びプロクシあり
privateクライアントのみあり
private_no_expireクライアントのみなし

有効期間の設定は session_ cache_ expire で行います。

有効範囲をサイト全体にする場合はphp.iniにて上記の設定を施します。

ページ単位であるならばphpファイルの冒頭で用います。
http://php.net/manual/ja/function.session-cache-limiter.php

<?php
session_cache_limiter('private_no_expire');

古い環境にも対応させたい場合はヘッダーで細かい設定を送り返すようにします。
http://jp2.php.net/manual/ja/function.header.php

<?php
$cache_expire = session_cache_expire() * 60;
header('Pragma:');
header('Expires:');
header("Cache-Control: private, max-age=$cache_expire, pre-check=$cache_expire");
header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT');

長々と書きましたが、
サイト構築・運営の手間削減と、二重投稿防止に寄与することなので、
仕組みを理解したうえでデフォルトのまま使う事をお勧めしたいですね。

その他の回答0件)

id:windofjuly No.1

回答回数2625ベストアンサー獲得回数1149ここでベストアンサー

二重投稿などの意図せぬ投稿を防ぐための手段として、
WEB製作者がキャッシュを持たせないような施策をしていたりすると、
『Web ページの有効期限が切れています』となります。
(ブラウザによって文言は変わります。)

困ったことに人力検索は有効期限による施策を用いていないため、
同じ質問を二つも三つもしてしまう人がいます…。
無料質問導入前には多重投稿防止策がこうじられていたはずなのですが、
今は未対応になってシステム的には逆行してますね…。


さて、phpの場合ですが、
設定確認や変更は session_cache_limiter で行います。

設定対象有効期間の有無
nocache(デフォルト)キャッシュを許可しない-
publicクライアント及びプロクシあり
privateクライアントのみあり
private_no_expireクライアントのみなし

有効期間の設定は session_ cache_ expire で行います。

有効範囲をサイト全体にする場合はphp.iniにて上記の設定を施します。

ページ単位であるならばphpファイルの冒頭で用います。
http://php.net/manual/ja/function.session-cache-limiter.php

<?php
session_cache_limiter('private_no_expire');

古い環境にも対応させたい場合はヘッダーで細かい設定を送り返すようにします。
http://jp2.php.net/manual/ja/function.header.php

<?php
$cache_expire = session_cache_expire() * 60;
header('Pragma:');
header('Expires:');
header("Cache-Control: private, max-age=$cache_expire, pre-check=$cache_expire");
header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT');

長々と書きましたが、
サイト構築・運営の手間削減と、二重投稿防止に寄与することなので、
仕組みを理解したうえでデフォルトのまま使う事をお勧めしたいですね。

id:hatikuro109

返信が遅くなり申し訳ございません。

詳しく説明をして頂き本当にありがとうございました!

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません