へっぽこコーダーの備忘録

phpやらjavascriptやら、使った技術をすぐに忘れちゃうから、おぼえがき程度に書いていきまーす
2015.04.03

フォームの結果先から前のページに戻ると「ドキュメントが有効期限切れです」になっちゃうときの対処☆

PHPを使用し、フォームでの絞り込みを使用したサイトで、結果ページからブラウザの「戻る」ボタンで前のページに戻ろうとすると、

f:id:sawayaka4kumi:20150403152855p:plain

ってなっちゃいました。

「再試行」を行うとページは表示されるのですが、不恰好なので「再試行」を行わずとも、戻った時点でページが表示されるようにしたい!

ということで、調べてみました。

まず、わたしの環境は、WordPressベースで、formの条件をsessionでも持ち歩いております。

で、session周りの問題だろうと思い検索すると、ありがたいことに同じ悩みを持った人がたくさんいました。

結果的には、

session_start();

の前に

session_cache_limiter("none");
やら
session_cache_limiter("private_no_expire");
を書いてやると解決しました!って人がいっぱい☆
session_cache_limiterの設定については↓のサイトを見てね☆
なので、
session_cache_limiter("private_no_expire");
session_start();

って書いてやって終わりだ!って安心していたのですが、そうでもなかった!

WordPressを使用していたため、

そもそも「session_start();」の記述がヘッダにない(汗)

「session_start();」を書かなくてもsessionは使用できているのですが。。。

とりあえず、funcion.phpにアクションフックで

function init_sessions() {
	if (!session_id()) {
		session_cache_limiter("private_no_expire");
		session_start();
	}
}
add_action('init', 'init_sessions');

を追加してやりました。

これでヘッダに必要な設定を書き込めただろうと思い、ブラウザで動きを確認するも

f:id:sawayaka4kumi:20150403152855p:plain。。。。。

もはや、wordpressで「session_start();」とか記述するのが間違っているのか。。。

で、調査を続けること数十分。キャッシュデータの使用云々をヘッダ情報に直接指定してやればよいとの情報を発見!

またもやfunction.phpを開き、今度は、

function add_header_session() {
	header("Cache-Control: private");
	header("Pragma: no-cahce");
	header("Expires: ");
	header("Last-Modified: ");
}
add_action( 'send_headers', 'add_header_session' );

を記述。

最後の希望にすがりながらブラウザを更新し、

「戻る」ボタンをクリックすると、ちゃんと前のページが表示されるようになりました^^