• 締切済み

session_cache_limiterの使い方

警告 ページの有効期間切れと表示される場合は session_cache_limiter('private'); という1文を追加すればいいとあったので、ソースの1番上に追加しました。 それで、あるページでセッション変数を定義して、別のページではそのセッション変数があるかないかで何か処理を動かすということをやりたいのですが、セッション変数が無い状態でキャッシュされている(キャッシュの使い方が違っていたらすみません)ようで、その処理を動かすためには1回更新をかけないといけません。この場合はどのようにしたらいいのでしょうか?

  • PHP
  • 回答数2
  • ありがとう数2

みんなの回答

  • hrm_mmm
  • ベストアンサー率63% (292/459)
回答No.2

あ、'private'と'nocache' を勘違いして述べてしまいました。済みません。 >キャッシュというのは、再読み込みしやすい場所へ一時的に保存する 逆です、再読込しなくてよいように、回線のトラフィックを減らす為にブラウザのパソコン内にページデータを保存すると言うことです。よって、キャッシュがあれば、再実行はされません、ユーザーが自分で再実行してくれと更新をかけないとなりません。 常に更新させたいなら、'nocache' とすべきでしょう。

shaka001
質問者

お礼

回答ありがとうございます。 >常に更新させたいなら、'nocache' とすべきでしょう。 あるページの有効期間切れ対策のサイトで「当関数を呼ばない場合、自動的にsession.cache_limiterに指定された値が適用されるらしい。そのデフォルト値は'nocache'であるらしい。」とありました。 これでは、session_cache_limiterを使っていない状態と同じですよね?警告 ページの有効期間切れと表示されてしまうのでは?、と思います。 ある別のサイトでは再リロードするには"private, must-revalidate"を使うとありますが、また別のサイトではこのリミッタは無効であるとしています。実際に、効果はありませんでした。 ページの有効期間切れ対策の根本的な解決策は見つかっていないということなんでしょうか?

  • hrm_mmm
  • ベストアンサー率63% (292/459)
回答No.1

キャッシュの意味を勘違いしておられるようです。 session_cache_limiter('private'); これは、ブラウザに「このページを保存しないでね。」というheaderを送信するためのものです。 よって、別ページへ行けば、そのページにまだ訪れていなければ、普通に表示されます。 更新ボタンを押せば、キャッシュはないので、「警告 ページの有効期間切れ」が表示されます。 session で何がしたいのか、が、つかみ切れていないのですけど、 ページをまたがって、sessionの期限切れ表示を行いたいなら、プログラム側で、session データとして最終アクセス時刻などを保存して、プログラム側でページの有効期限切れを表示させることになるのでは?

shaka001
質問者

補足

PHPマニュアルにはキャッシュリミッタがprivateというのは「プロキシがキャッシュすることは許可しませんが クライアントがキャッシュすることは許可される」とありました。クライアントがキャッシュすることを許可するというのは、ブラウザにページの保存を許可するということではないのでしょうか? キャッシュというのは、再読み込みしやすい場所へ一時的に保存するということではないんでしょうか?いまいちキャッシュの意味がつかみきれていません。

関連するQ&A

  • IE で「警告 : ページの有効期限切れ」 session_cache_limiter?

    PHP5でsessionを利用しています。 IE で「警告 : ページの有効期限切れ」を出さないために、.htaccess に php_value session.cache_limiter private_no_expire と指定してます。 これで、ページの有効期限切れ問題は解決したのですが、今度は、 ログアウトしても、キャッシュが残ってマイページが見れる状態に なってしまいます。 よい解決方法はあるのでしょうか?

    • 締切済み
    • PHP
  • session_cache_limiterについて

    お世話になっています。 キャッシュで、悩んでいます。 ログイン(セッションに名前などを登録)  ↓ 入力フォーム(「登録」ボタンを押す)  ↓ 判定(エラーが発生したら、「戻る」ボタンを押してもらい、 入力フォームに戻る。) という、ごくありきたりな、事をやっているのですが、 iniファイルで、session_cache_limiter('nocache') にすると、「戻る」ボタンを押しても、先ほど入力 したデータが全て消えています。 今度は、入力フォームの先頭で、session_cache_limiter("public");を 入れると、確かに、「戻る」ボタンを押しても、先ほど入力したデータが 保持されていますが、この状態で、 session_unset(); session_destroy(); をして、再度、入力フォームに行っても、前回のセッション情報 (前回ログインした、ユーザー名)を保持したままになっています。 セッションの情報のキャッシュは破棄して、入力フォームのデータ はキャッシュしたいのですが何か良い方法は、無いでしょうか? session_cache_limiter("private");にしても、結果は同じです。 環境は、php4.06 apache1.3 です。 よろしくお願い致します。

    • 締切済み
    • PHP
  • キャッシュ無効の状態で、セッション変数への影響は?

    こんにちわ。いつもお世話になってます。 現在会員制のホームページをPHPで制作中です。 IDやPASS等の情報をDB(MySQL)に格納し、ログイン時にDBにアクセスして、照合が出来たら会員である情報をセッション変数に保存して会員用ページを渡り歩く、といったものをイメージしています。 ですが、一つ困ったことが。 会員用コンテンツの中に、掲示板のようなものがあるのですが、投稿した直後に限り、自分の書き込みが反映されてないように表示されるのです。 (form actionは$_SERVER['PHP_SELF']を指定。同じページ内の上部の方で$_POSTを受け取って処理。処理した後はそのまま記事表示処理に移行。) 多分、キャッシュされているからこの様な動作になると思うのですが・・・。 投稿した後に、サイドに用意されているメニューバーから同じページにアクセスすると投稿が反映されて表示されます。 そこで、キャッシュさせない様に、PHPファイルの最上部で header("Content-Type: text/html; charset=Shift_JIS"); header("Expires: Thu, 01 Dec 1994 16:00:00 GMT"); header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT"); header("Cache-Control: no-cache,must-revalidate"); header("Cache-Control: post-check=0,pre-check=0",false); header("Pragma: no-cache"); を加え、キャッシュさせないように?しました。 実行してみたところ、投稿した直後でも無事に最新の状態を表示してくれるようになりました。 ここで本題です(冗長でゴメンナサイ・・・) 上記のコードでキャッシュを無効にした状態にしても、セッション変数は無事に動作してくれるのでしょうか? ローカルテストではセッション変数は無事に保持してくれるのですが、キャッシュやセッションに関して造詣が浅く、「キャッシュは無効にしてるけどセッション変数はキャッシュする」という矛盾した動作を指定している事に不安を感じます。 ルール上問題があるところがあれば指摘お願いいたします。 php.iniは以下の様に指定しています。 session.cache_limiter private_no_expire session.cache_expire 9999 session.auto_start off

    • 締切済み
    • PHP
  • セッション機能で

    セッション機能を利用するときに、セッション変数を宣言しますよね。 セッション変数を配列として使いたい場合にはどのように宣言すればよいのでしょうか? 実際のスクリプト内では session_start(); session_cache_limiter('limit'); session_register("hoge"); のように記述していますが、どうもうまく動作しません。 何か間違っている点があればご指摘・アドバイスをいただければありがたいです。 よろしくおねがいします。

    • 締切済み
    • PHP
  • sessionがクリアされない

    教えてください。 BBB.phpでこのように書いていたとします。 <?php session_cache_limiter('private, must-revalidate'); session_start(); ~いろいろ処理~ unset($_SESSION['pcode']); ~いろいろ処理~ ?> <?php include(dirname(__FILE__).'/../include/header.php'); ?> </body></html> header.phpでは $_SESSION['pcode']を表示しているのですが、 前のページ(たとえばAAA.php)で$_SESSION['pcode']に値を入れていた場合 BBB.phpを表示すると その値が表示されてしまいます。 直前に unset($_SESSION['pcode']); をしているのに その前の値が表示されます。 includeはどのタイミングでなされるのでしょうか? また、 unset($_SESSION['pcode']); を有効にするにはどうすればいいのでしょうか? よろしくお願いします。

    • ベストアンサー
    • PHP
  • 検索フォームのセッション管理について

    PHPを利用して検索フォームから入力された値を取得し、 条件にあった画面を表示しているのですがページを戻る際に警告が出て うまく戻れません。 流れ 1,フォームから値の取得 ⇒  2,送られた値を【$a】で受け取り、セッション変数に代入、条件にあったデータの表示(select * from sample where aaa like【$a】) ⇒  3,もしフォームの値が空でセッション変数に値があれば、セッション変数を【$a】に代入し条件にあったデータの表示 ⇒  4,フォームの値、セッション変数共に空ならセッション変数を削除し、他のページに飛ばす 5,新たにフォームから値が送られた場合は値を上書きする 以下が書いたコードです。 session_start(); if(isset($_POST["test"])){ $a = $_POST["test"]; $_SESSION["test"] = $a; }elseif($_POST["test"] == "" and isset($_SESSION["test"])){ $a = $_SESSION["test"]; }else{  unset( $_SESSION["test"] );  if (isset($_COOKIE["PHPSESSID"])) {   setcookie("PHPSESSID", '', time() - 1800, '/');  }  session_destroy();  header( "Location: /top.html" );  exit(); } 以下で【$a】を使いsql文を組み立て、データを表示しています。 このコードだと前のページに戻る際firefoxでは 【このページを表示するにはフォームデータを再度送信する必要があります。フォームデータを再送信すると以前実行した検索、投稿や注文などの処理が繰り返されます。】 と表示され、IEでも 【警告 : ページの有効期限切れ 要求したページは、フォームで送信された情報を使用して作成されました。このページは、もう利用できません。セキュリティ保護のため、情報は自動的には再送信されません。 情報を再送信し、この Web ページを表示するには、ツール バーの [更新] ボタンをクリックしてください。】 と表示されてしまいます 上記のコードをどのように変更すれば警告をださず行いたいことに記述したようにできるのでしょうか? ご教授ください。よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • 共通関数でセッションのタイムアウトを指定する方法

    phpを始めたばかりなので 根本的な考え方から間違ってるかもしれませんが、 その時はご指摘下さい。 やりたい事は、セッションのタイムアウトの指定です。 ログインしてから1時間後にタイムアウトを促すように 作りたいのですが、なかなか上手くいきません。 まず、ログイン画面のphpファイルが存在します。 ここでログインするとトップページの phpファイルへ飛びます。 トップページでは、 includeで前頁に共通する関数が詰まったphpファイルを取り込み、 それぞれのページで様々な処理を行います。 このincludeするphpファイルにセッションの タイムアウトを行う命令を入れようと思っています。 そうすれば、前頁でこのファイルをincludeするだけで 1時間後にセッションが切れる、という仕組みが できると考えているのですが、できないのであれば、 ご指摘下さい。 ちなみにその共通phpファイルに入れてみた命令は以下です。 session_cache_expire(分数) 又は… session_cache_limiter('private'); session_cache_expire (5); あまりコードの意味はわかっていませんが、 この方法で何故できないのでしょうか? 一応、このやり方でできなかったので 各ページ単体にも同じコードを入れてテストしましたが、 セッションが切れる事はありませんでした。 何かアドバイスをお願いします。

    • 締切済み
    • PHP
  • session_start()の際のCannot send session cache limiterエラーについて

    現在、SJISだったサイトをUTF-8に変換する作業をしております。 今まで起こらなかったエラーなのですが、検索エンジンで、フォーム(index.php)に入力して送信した結果がsearch.phpに出るプログラムです。search.phpに下記のようなエラーが表示されるようになりました。 Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /home/homepage/public_html/search/search.php:1) in /home/homepage/public_html/search/search.php on line 2 session_start()関数はもちろん<html>ヘッダーより前、プログラムの一番上に下記のように書いております。 <? session_start(); ?> <html> 他のページは問題無いのですが、今の所この検索プログラムの結果画面でのみ起こります。また、SJISで書いていた時はこのようなエラーは起こりませんでした。 恐らくUTF-8に変換した点がポイントだと思いますが、解決策が見つからずこちらに質問させていただきました。 よろしくお願いいたします。

    • 締切済み
    • PHP
  • session,タスク作成,formでPOST後戻る、データ復帰、再入力不可

    phpでフォームをつくり二重登録防止のためこちら(http://code.nanigac.com/source/view/178)のサイトを参考にセッションを追加しました。 が、フォームで誤入力の後戻ると入力したデータが消えるので session.cache_limiterをnoneにしたり、METAに入っているキャッシュ関連のものを消してデータが消えないようになりましたが、 今度は再入力後登録しようとすると上記の機能によりエラーが出されてしまいます。 戻るボタンで前のページに戻り、[F5]キーでリフレッシュすれば データも消えず、登録も出来ましたが、それもどうかと思うので 戻るボタンで戻っただけで再登録できるようにしたいのですが、 どなたかやり方を教えてください。

    • ベストアンサー
    • PHP
  • $_SESSION = array() と session_destroy(); の関係性。

    //(1)セッション変数の値をクリア $_SESSION = array() //(2)セッションファイルを破棄 session_destroy(); ----------------------------------------------------- 以前にも似たようなことを質問させて頂きましたが、 その時には気にならなかった点が気になって来ましたので、 質問させて頂きます。 で、早速ですが、 (2)をするにあたり、(1)をする意味がわからないので、 どなたか教えて下さい。 セッションファイルを削除したならば、 セッション変数は引っ張って来られなくなるのでは? と私は思っているわけです。 よって、結局、引っ張って来られなくなる変数を、 (1)のようにしてクリアしておく意味が分からないのです。 セッション変数の値は、 セッションファイルから引いてきていると思っているのですが、 そうではないのでしょうか? ---------------------------------------------------------- また、 ちょっと話題は変わり、 unset($_SESSION)としてしまうと、何やらイケナイようなのですが(マニュアルにそう書かれている)、 これをすると、実際、どうなるのでしょう? セッション変数に登録されている複数の値を消す場合には、 array()を使ったり、session_unset()を使えば 良いことは分かっております。 私が知りたいのは、こういうことではなく、 あくまで、unset($_SESSION)してしまうと、 どうなってしまうのか(復元不能な致命的なソース破壊に陥る?!)、 これが知りたいのです。 よって、大きく分けて、質問は2つあることになります。 以上、よろしくお願い致します。

    • ベストアンサー
    • PHP

専門家に質問してみよう