/// BANGBOO BLOG ///

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

February 21, 2007

Warning!! Page Expired.

PHP 警告 : ページの有効期限切れ
POSTを使わなければでないのだが、IEのキャッシュがいっぱい2になったときの仕様である。

session_cache_limiter('private, must-revalidate');
かならず再読み込みをする。入力フォームで入れた情報が消える場合がある。入力値をクッキーでカバーできるならこれでOK。

session_cache_limiter('private_no_expire');
入力フォームのデータなどは消えないが必ずcacheを読むため、リロードで古いものを見せ続ける危険性がある。

&lt;a href="form.php?<?=time(); ?>">Go Form</a>
リンクをユニークにすると必ず再読み込みするようになる。

if (0 < count($_POST)) {
    session_cache_limiter('private_no_expire');
}
POSTのときだけcacheを有効にする。ブラウザの戻るボタンで戻るとPOSTできていない先頭ページは入力が消えている。

&lt;a href="form.php?doCache">Go Form</a>
if (0 < count($_POST) || array_key_exists("doCache", $_GET)) {
    session_cache_limiter('private_no_expire');
}
cacheしたいときにcache指定、POSTのときは強制cache。

--------------

■PHPのバージョンによるのか新情報

session_cache_limiterの引数は
none/nocache/private/private_no_expire/public
のいずれかしか受け付けず、その他の値をセットするとpublicを指定した場合と同じでsession_cache_limiter('private, must-revalidate')はキャッシュ制御ヘッダが送信されない

1) nocache:クライアント/プロキシのキャッシュを無効
2) public:クライアントマシン/プロキシのどちらもキャッシュ
3) private:クライアントマシンのみキャッシュ保持。Expireヘッダが送信されます
4) private_no_expire:privateと同じだがExpireヘッダはクライアントに送信されません。有効期限切れを回避

フォームの入力内容を保持して、ブラウザの戻るで戻りたい場合は、private_no_expireかnoneがいいみたいだ

●session_cache_limiter('private_no_expire');
期限切れが出にくいがキャッシュばかり使う(静的ページ、静的なページのフォーム)
※運用時はprivate_no_expireでも開発時はnoneで

●session_cache_limiter('nocache');
戻ると期限切れがでる(動的ページ、フォームには向かない)

●session_cache_limiter('none')
キャッシュヘッダを出さず、期限切れが出にくく適時読み込みをするがブラウザによる(動的なページのフォーム、更新がよく掛かる静的ページ)

●フォームに戻ってキャッシュ一杯で期限切れを出し、更新ボタンで再ポストを避けたい
期限切れを出さないフォームは、GETかsession_cache_limiter('none');かsession_cache_limiter('private_no_expire');
2重登録NGなフォームは、DBMSにPKやユニークをチェックさせるか、トークンを使うか、処理後リダイレクト

●トークン
1)フォーム表示時点で、画面にhiddenにキーを、セッションにもキーを仕込んでおく。
$taskId = mt_rand();
$_SESSION['taskId'] = $taskId;
print('<form action="submit.php" method="post">');
print('<input type="hidden" value="' . md5($taskId) . '" name="taskId" />');
print('<input type="submit" value="submit" name="submit" />');
print('</form>');
2)登録処理のとき、画面から来たキーとセッションに格納されているキーを比較して、正しくフォーム表示の画面から遷移しているか確認する。
<?php
//二重登録防止フォーム-登録処理
session_start();
$taskId = $_SESSION['taskId'];
unset($_SESSION['taskId']);
if (md5($taskId) == $_POST['taskId']) {
 print('きちんと前の画面からsubmitされています。');
 //登録処理後に完了画面にHTTPリダイレクトで遷移するようにしておけば特別な対策なしでも完了画面をリロードされても問題なし
 header(‘Location: 完了画面URL’);
} else {
 //二重登録された場合や、直接アクセスされた場合の処理
 print('フォームを通してアクセスして下さい。');
}

twitter
Hatena
Google Buzz
newsing
Yahoo!
Buzzurl
Technorati
del.icio.us
Choix
Iza!
Livedoor Clip
Facebook
Evernote
 

Posted by funa : 07:56 PM | Web | Comment (0) | Trackback (0)


PhotoGallery


TWITTER
Search

Mobile
QR for cellphone  QR for smart phone
For mobile click here
For smart phone click here
Popular Page
#1Warning!! Page Expired.
#2Web
#3Column
#4Hiace 200
#5Europe
#6ApacheBench
#7/// BANGBOO BLOG /// From 2016-02-01 To 2016-02-29
#8Wifi security camera with solar panel & small battery
#9Branding Excellent
#10Shoot
#11/// BANGBOO BLOG /// From 2013-05-01 To 2013-05-31
#12/// BANGBOO BLOG /// From 2015-08-01 To 2015-08-31
#13Win7 Insco
#14/// BANGBOO BLOG /// From 2010-08-01 To 2010-08-31
#15/// BANGBOO BLOG /// From 2013-03-01 To 2013-03-31
#16/// BANGBOO BLOG /// From 2016-09-01 To 2016-09-30
#17Gadget
#18動画をキャプチャーする
#19セレブ
#20Disposable Income
#21Ant
#22Cache
#23/// BANGBOO BLOG /// From 2014-09-01 To 2014-09-30
#24/// BANGBOO BLOG /// From 2014-12-01 To 2014-12-31
#25/// BANGBOO BLOG /// From 2016-07-01 To 2016-07-31
#26Being The Ideal Boss
#27Darwinian Theory Of Evolution
#28Ora Ora Ora Ora Ora
#29Who's BAT? (Batch file)
#30☆od damnit
#31SN
#32How to make a bomb - 爆弾の作り方
#33Emancipation Proclamation
#34Significant Rule
#35/// BANGBOO BLOG /// From 2013-02-01 To 2013-02-28
#36RSS Radio
#37Flavor
#38Doing?
#39Fork OH
#40ahe-ahe is goooood for your brain
#41Re-install my OSXP
#42No ID
#43System designing
#44/// BANGBOO BLOG /// From 2014-04-01 To 2014-04-30
#45/// BANGBOO BLOG /// From 2015-02-01 To 2015-02-28
#46/// BANGBOO BLOG /// From 2015-03-01 To 2015-03-31
#47/// BANGBOO BLOG /// From 2016-01-01 To 2016-01-31
#48/// BANGBOO BLOG /// From 2016-03-01 To 2016-03-31
#49/// BANGBOO BLOG /// From 2017-02-01 To 2017-02-28
#50Bike
#51The team that always wins
#52Net Corruption
#53ZETA Pivot
#54Google API
#55Itinerary with a eurail pass
#56ICOCA
#575-year-old shit
#58Where Hiphop lives!!
#59People never say truth, Just do it, observe them, Anything is impossible
#60Warning!! Page Expired.
#61/// BANGBOO BLOG /// From 2011-11-01 To 2011-11-30
#62/// BANGBOO BLOG /// From 2014-01-01 To 2014-01-31
#63/// BANGBOO BLOG /// From 2014-06-01 To 2014-06-30
#64/// BANGBOO BLOG /// From 2016-06-01 To 2016-06-30
#65The black sheep to the black ship
#66Ressentiment
#67CSS Selectors
#68Online softwares
#69α7Ⅱ
#70Detected as bad site by virus company
#71Big D
#72Classic Font
#73/// BANGBOO BLOG /// From 2013-09-01 To 2013-09-30
#74/// BANGBOO BLOG /// On 2016-03-08
#75/// BANGBOO BLOG /// From 2016-05-01 To 2016-05-31
#76Cache
#77Pigs will fly out of my ass
#78Optimost
#79PC SPEC 2007.7
#80My mic
#81Positive
#82TPPBT (I Sue You)
#834 Pole Plug
#84Bike comparison
#85Assertive Behavior
#86Yupiteru
#87/// BANGBOO BLOG /// From 2013-08-01 To 2013-08-31
#88/// BANGBOO BLOG /// From 2015-12-01 To 2015-12-31
#89/// BANGBOO BLOG /// From 2016-04-01 To 2016-04-30
#90/// BANGBOO BLOG /// From 2016-10-01 To 2016-10-31
#91/// BANGBOO BLOG /// From 2017-01-01 To 2017-01-31
#92Rock Will Never Die
#93Are you spy on me?
#94角印
#95Rear shock OH
#96Tools - free icon etc
#97Norton Internet Security
#98Contaminated
#99Automobile Inspection
#100Estimation
Category
Recent Entry
Trackback
Comment
Archive
<     October 2017     >
Sun Mon Tue Wed Thi Fri Sat
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Link