• 締切済み

キャッシュ無効の状態で、セッション変数への影響は?

こんにちわ。いつもお世話になってます。 現在会員制のホームページを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
  • 回答数1
  • ありがとう数1

みんなの回答

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

ブラウザ(クライアント側)のキャッシュと、サーバーサイドのセッションデータ保持とをごっちゃにしないように。

関連するQ&A

  • session_cache_limiterの使い方

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

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

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

    • 締切済み
    • PHP
  • セッションの有効期限の設定方法とログアウト方法

    会員システムをPHPのセッション管理を使って作っているのですが、 1.セッションの有効期限の時間を変更するためにはsession_cache_expireを使うんだと思うんですが、これは全ページのsession_start()の前に書かないといけないのでしょうか? それとも、ログインするときに必ず通るPHPファイルに書いておけば大丈夫なのでしょうか? 2.会員ログアウトをする場合は、 unset($_SESSION['****']); でログインするときに入れた変数をunsetするだけで大丈夫なのでしょうか? もっと他に一般的な方法があったりするのでしょうか? どちらかだけでもお分かりの方がいれば教えていただければうれしいです。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • セッションの変数の受渡しについて

    よろしくお願いします。 セッションを利用して変数受渡しを行おうと思い、初めての試み なので簡単なものを作ってやってみたのですが、変数に値をセットしたtest.phpでは値が表示されますが、リンク先のtest2.phpでは表示されません。 以下のソースで試しています。 -------------------------------------------------- test.php <?php session_start(); session_register("aa"); $_SESSION['aa'] = 1234; print $_SESSION['aa']; print "<p>"; print "<a href='test2.php'>next</a>";←ここの画面では表示されます。 ?> test2.php <?php session_start(); print $_SESSION['aa'];←表示されません ?> ---------------------------------------------- 想定では画面に”1234”と出ると思っていたんですが・・。 他質問をみて真似て色々試したのですが、やはり表示できませんでした。 環境は以下です apache2 php ver4.4.4 session Session Support enabled Registered save handlers files user Directive Local Value Master Value session.auto_start Off Off session.bug_compat_42 On On session.bug_compat_warn On On session.cache_expire 180 180 session.cache_limiter nocache nocache session.cookie_domain no value no value session.cookie_lifetime 0 0 session.cookie_path / / session.cookie_secure Off Off session.entropy_file no value no value session.entropy_length 0 0 session.gc_divisor 100 100 session.gc_maxlifetime 1440 1440 session.gc_probability 1 1 session.name PHPSESSID PHPSESSID session.referer_check no value no value session.save_handler files files session.save_path c:\windows\Temp c:\windows\Temp session.serialize_handler php php session.use_cookies Off Off session.use_only_cookies On On session.use_trans_sid On On 環境の問題でしょうか?各ブラウザで試したのですが、ダメでした。 初歩的質問で申し訳ありませんが、ご教示よろしくお願いします。

    • ベストアンサー
    • 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
  • セッションが変数が取得できません

    こんにちは。初心者で大変申し訳ないのですが、2日間悩みましたがどうしても解決できないため質問させて頂きました。どうかご教授下さい。 PHPのセッション機能の利用をしようと以下のような環境でテストスクリプトを実行したのですが、うまくいきません。 PHPバージョン4.3.10 register_globals On session.auto_start Off session.bug_compat_42 On session.bug_compat_warn On session.cache_expire 180 session.cache_limiter nocache session.cookie_domain no value session.cookie_lifetime 0 session.cookie_path / session.cookie_secure Off session.entropy_file no value no session.entropy_length 0 session.gc_divisor 100 session.gc_maxlifetime 1440 session.gc_probability 1 session.name PHPSESSID session.referer_check no value session.save_handler files session.save_path /tmp session.serialize_handler php session.use_cookies Off session.use_only_cookies Off session.use_trans_sid On SESSION登録側スクリプト <?php session_start(); $_SESSION['tarou'] = 50; ?> <a href="test.php">test</a> 結果表示側スクリプト <?php session_start(); echo($_SESSION['tarou']); ?> session.use_trans_sid Onで透過的にURIにセッションIDを埋め込むタイプで、 セッションファイル自体は作られているのですが セッション変数は登録されておらず、空のセッションファイルとなってしまっています。 色々と調べてみたのですがどうしても解決できません。 大変お手数ですがどうか宜しくお願い致します。

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

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

    • 締切済み
    • PHP
  • セッション変数のセキュリティ

    プログラム初心者です セッション変数の安全性について教えてください ログインしているかをセッション変数で判定しています。セッションidは使っていません 質問1 悪意をもったハッカーがセッション変数を取得することはできますか?それともセッション変数はクッキーと違い安全なんでしょうか? 質問2 セッション変数の保持時間は決まっていますか? session_start(); if(!isset($_SESSION['id'])){ header('Location: login.php'); exit(); } よろしくお願いします

    • ベストアンサー
    • PHP
  • PHPでのセッション管理について

    こんにちは。 PHP初心者の者ですがよろしくお願いします。 現在、ログイン時にセッションを登録し、 メイン画面を表示している部分でセッションを 取得したいのですがうまく取得できません。 メイン画面は、フレームで2つに分割してあります。 ご協力お願いします。 ソースの一部 【a.php】 // セッション名の指定 session_name('my_session'); // ページキャッシュ session_cache_limiter('nocache'); // 情報の保存期間(30分) session_cache_expire(30); //セッション開始 session_start(); $_SESSION["id"]=$_POST["id"]; $_SESSION["pw"]=$_POST["pw"]; $_SESSION["user_cd"]=$user_cd; $_SESSION["syain_name"]=$syain_name; $sid = session_id(); //接続先指定 header("Location: http://".$_SERVER["HTTP_HOST"].dirname($_SERVER["PHP_SELF"])."/frame.php?PHPSESSID=$sid"); ?> 【frame.php】 <frameset rows="*" cols="151,*" framespacing="0" frameborder="1" border="0"> <frame src="menu.php" name="leftFrame" scrolling="NO" noresize> <frame src="main.php" name="mainFrame"> </frameset> 【menu.php】 <?php session_start(); $id = $_SESSION["id"]; $user_cd = $_SESSION["user_cd"]; $syain_name = $_SESSION["syain_name"]; print $syain_name."<br>"; //←何も表示されない ?>

    • ベストアンサー
    • PHP
  • AからBへセッション変数の受け渡し(ページ間の移動うまくできない)

    Aプログラム後半部分より //下記をセッション変数に登録 //$_SESSION[セッション変数名] = 値; $_SESSION[suid] = $uid; print "uid = ".$_SESSION[suid]. "<br>"; //確認してます //ページをadminpageに飛ばす ?><BR> <a href="adminpage.php">認証されました。管理者ページへ</a> </body> </html> Bプログラム前半部分/*管理者ページadminpage.php*/ session_start(); print "uid = ".$_SESSION[suid]. "<br>";//確認表示 // いきなりこのページにアクセスがあった場合 if( !$_SESSION[suid] ){ session_destroy(); header("Location: index.php"); exit; } ?> というプログラムですが、Bのプログラムの確認表示部分で"$_SESSION[suid]"が表示されません。Aプログラムでは表示されます。 プログラムの他の部分は個別に動作確認済みです。 エラーとして、ユーザーページの移動時(成功プログラム)に使った$_SESSION[suid]の値が表示されたりもします。原因を教えて下さい。

    • 締切済み
    • PHP

専門家に質問してみよう