1. TOP
  2. Web

[php] 「ページの有効期限切れ・フォーム再送信の確認」の対策

カテゴリ:
Perl / PHP
Web
| トラックバック(0)
投稿者:yo yo

原因

  • SESSIONを使っている
  • POSTでパラメータを送信
  • ブラウザの「戻る」を押した

犯人はだれだ?

原因は、PHPでSESSIONを使うと(デフォルト設定では)自動でキャッシュ制御用のHTTPヘッダーが送出され、それによりクライアント側のキャッシュが使用不可にされるため。(参考:floatingdays: PHPでブラウザキャッシュを有効にする)

つまり、下記条件を全て満たした場合にこの現象が発生する。

  • HTTP POSTで遷移してきた。
  • SESSIONを使っている。(session_start()してるか、php.ini等でsession.auto_start=1に設定している。)
  • 次のページに行ってから、ブラウザの履歴機能(JavaScriptのhistory.back()を含む)で戻ってきた。
PHPで 「Webページの有効期限が切れてます」となる時の傾向と対策 - floatingdays

対策

方法1

session_start()する前に、session_cache_limiter('none')を書く。SESSIONを利用しても余計なHTTPヘッダが送出されない。

  session_cache_limiter('none');
  session_start();
  // フォーム

cache_limiterにnoneというパラメータは無いからパラメータエラーとなり、結果的にHTTPヘッダを送信しないという挙動になっているらしい。

PHP: session_cache_limiter - Manual

方法2 こっちが正解

header();に色々書いて、ブラウザキャッシュを表示させる。ただし、SESSIONの最新情報が入っていないので注意が必要。

  session_start();
  header('Expires:-1');
  header('Cache-Control:');
  header('Pragma:');

[pushState + ajax] ページの動的遷移 PJAXを実装してみよう・・・?

カテゴリ:
Web
javascript
雑記
| トラックバック(0)
投稿者:yo yo

今更誰にも聞けないPJAXの実装をやる。他ページの特定のDOM内をシームレスに持ってこれる。しかも高速。URLも綺麗。SEO的にも問題ない。特ダネじゃないか。

で、3つくらいあるみたいなんだけど、何が違うのか解らない。この時点で詰んでるし面倒くさい。とりあえずjquery-pjaxから実装してみる。

コード

jQuery PJAX(defunkt版)を使って検索結果の表示とURLをシームレスに切り替える。

html

	

javascript



公式ではこんな感じな筈。

[ウェブサイト] 不動産屋さんのウェブサイトをご紹介

カテゴリ:
Web
その他
| トラックバック(0)
投稿者:yo yo

161114img01.jpg
Screen shot : 登戸エステート|川崎市多摩区登戸 登戸駅・向ヶ丘遊園駅 賃貸 不動産の登戸エステート

川崎市多摩区の不動産を取り扱う会社からサイトのスマフォ化対応などの仕事を会社で請け負いました。ありがとうございました。

川崎市多摩区登戸周辺の賃貸アパート・マンションをお探しの方、専修大学・明治大学・日本女子大学へ入学の際に一人暮らし様のお部屋を探している方は一度相談してみてはいかがでしょうか?親身になって話を聞いてくれる優しい不動産屋さんでとても頼りにます。

[PHP] 堅牢なコードの書き方メモ

カテゴリ:
Perl / PHP
Web
その他
| トラックバック(0)
投稿者:yo yo

[Wordpress] 独自クエリをシステムへ追加する

カテゴリ:
Web
Wordpress
| トラックバック(0)
投稿者:yo yo
/* *********************************************************************************
独自クエリの一括追加
********************************************************************************** */
function add_query_vars_filter( $vars ){
    // URL例:http://www.example.com/wordpress/?hoge=1&piyo=2&fuga=3 とか

    $vars[] = "hoge";
    $vars[] = "piyo";
    $vars[] = "fuga";

	echo'';
		var_dump($_GET["hoge"]);
		var_dump($_GET["piyo"]);
		var_dump($_GET["fuga"]);
	
		var_dump($hoge);
		var_dump($piyo);
		var_dump($fuga);
		
		var_dump( get_query_var( 'hoge' ) );
		var_dump( get_query_var( 'piyo' ) );
		var_dump( get_query_var( 'fuga' ) );
		
		var_dump($wp_query->query);
	echo'';

    return $vars;
}
add_filter( 'query_vars', 'add_query_vars_filter' );
ページの先頭に戻る