PHPでセッションの切れるタイミングについて

このQ&Aのポイント
  • PHPにおけるセッションのタイムアウトについて調べました。セッションがタイムアウトした場合、$_SESSION全体が開放されるのか、個々のセッション変数は残るのか疑問に思っていました。
  • 複数のセッションを定義した場合、セッションが生きているかどうかを確認するには、定義したすべてのセッション変数を調べる必要があるのか、それとも一つだけを調べれば良いのかについて知りたいです。
  • セッションのタイムアウトに関する詳細な仕様を把握することは重要です。それによって、セッションの管理方法を適切に設定することができます。
回答を見る
  • ベストアンサー

phpでセッションの切れるタイミングについて

page1.phpで $_SESSION["SESSION_1"] = "aaa"; 次画面 page2.phpで $_SESSION["SESSION_2"] = "bbb"; としたとします。 セッションがタイムアウトした場合、$_SESSION[]ごとすべて開放されているのか、 $_SESSION["SESSION_1"]と$_SESSION["SESSION_2"]は個別なのかどちらですか? えーと、何がしたいのかと言いますと、 複数セッションを定義したとして、 セッションが生きているかどうかは定義したセッションすべて調べないとわからないのか? どれか一つ調べればいいのか? それが知りたいです。

noname#17562
noname#17562
  • PHP
  • 回答数1
  • ありがとう数0

質問者が選んだベストアンサー

  • ベストアンサー
  • MrYoYoYo
  • ベストアンサー率33% (38/115)
回答No.1

セッションに保存されたデータはセッションIDをキーをとして引き出されます。 そうでないと、ブラウザAのデータとブラウザBのデータが混合してしまうからです。 なので、 $_SESSION[A]も$_SESSION[B]も いつ保存されたかではなく、各セッションのデータにアクセスするためのキーの期限が切れた、もしくは、キーが変わった時点で、アクセスができなくなります。 つまり、セッションが生きているかどうかは、セッションに保存されている、ひとつのデータを確認すれば大丈夫です。

noname#17562
質問者

補足

ありがとうございます。 確認方法としては 任意のセッション1つに対し isset($_SESSION["SESSION_1"]) で宜しいですか? 「いや、普通はこうする」というのがありますか?

関連するQ&A

  • $_SESSIONの取りだし方、使い方PHP

    質問失礼いたします。 【1.html】から【A.php】に$_POSTされた値を、$_SESSIONにて下記の通りに格納しています。 $name = $_POST['name']; $_SESSION['name'] = $_POST['name']; $address = $_POST['address']; $_SESSION['address'] = $_POST['address']; $gender = $_POST['gender']; $_SESSION['gender'] = $_POST['gender']; そして、上記の$_POSTされた値を使って、データを検索し20件ずつ表示させて改ページを行っています。 <?php if ($page > 1) { ?> <li><a href="search2.php?page=<?php print($page - 1); ?>">前のページへ</a></li> <?php } else { ?> <li>前のページへ</li> <?php } ?> <?php if ($page < $maxPage) { ?> <li><a href="search2.php?page=<?php print($page + 1); ?>">次のページへ</a></li> <?php } else { ?> <li>次のページへ</li> <?php } ?> 違うかもしれませんが、 アドレスに  &name=○&address=○&gender=○  という風にして、次のページではアドレスにある値を使う みたいなこととは思うのですが、   &name=<?php print($name; ?> とすると、アドレスでは  &name=Array となってしまいます。 セッションに格納した検索条件を次のページにも使うようにはどのようにすればよいのでしょうか。 また、上記の次ページのアドレスに、  &name=○&address=○&gender=○  と表示しないようなやり方もあるのでしょうか?

    • ベストアンサー
    • PHP
  • セッションが切れないのは何故?

    画面にログインして操作中、セッションが切れた場合にまたログイン画面を表示するという処理のテストをしています。 タイムアウトまでの時間が24分となっていたので、画面にログインした状態でPCに触らず放置していました。 30分程度放置した後に次の処理に移るためのsubmitボタンをクリックしたところ、セッションは切れず処理が続行されてしまいました。 何故セッションは切れなかったのでしょうか? タイムアウトさせるには何か特別な処理を行わなければいけないのでしょうか? アドバイスをお願いいたします。

    • ベストアンサー
    • PHP
  • Apacheでセッションタイムアウトの設定方法

    ApacheでPHPで作ったシステムを動かしています。PHPの画面間のデータの受け渡しはセッションを使って行なっているのですが、 そのセッションが早めにタイムアウトとなってしまうので、 時間を長めに設定したいと思っています。 httpd.confのTimeOutを変更してみたのですが、 これはセッションのタイムアウトとは関係ないようで、 変更しても、動きが変わりませんでした。 httpd.conf内に他にそれらしい項目がないのですが、 セッションのタイムアウトを変更した場合、どこにあるどのファイルを変更すればよいのでしょうか? よろしくお願いします。

  • phpのセションのタイムアウトについて

    os:ターボ8 PHP:4.2.3 phpのセションのタイムアウトについてご教授願えないでしょうか Q1.タイムアウトの初期値は変更できますか? php.iniの session.gc_maxlifetime = 1440 を session.gc_maxlifetime = 60 にしてhttpdを再起動して試してみたのですが1分以上放置してもセッション情報は残ったままでした。 これってどうなのでしょうか? Q2.プログラム内でタイムアウトの設定を確認するシステム変数はありますか? ちゃんとタイムアウトの時間が変わっているか確認したいのですが。 Q3.タイムアウトの時間を無限大にしてタイムアウトしない設定にする方法はありますか? 以上、個別でも結構ですのでお願いします。

    • 締切済み
    • PHP
  • PHP SESSION変数の削除について

    PHPでブラウザを×で閉じた場合、SESSION変数 の廃棄はどうすればよいのでしょうか? ガーペジコレクション(PHP.INI等の設定)に任せておけばよいのでしょうか? ちなみにログアウトの際は下記のプロシジャを実行しています。 ----------------------------- <?php session_start(); // セッション変数を全て解除する $_SESSION = array(); // セッションを切断するにはセッションクッキーも削除する。 // Note: セッション情報だけでなくセッションを破壊する。 if (isset($_COOKIE[session_name()])) { setcookie(session_name(), '', time()-42000, '/'); } // 最終的に、セッションを破壊する session_destroy(); ?> -----------------------------

    • 締切済み
    • PHP
  • セッションのスコープ(有効範囲)について

    セッションのスコープ(有効範囲)について困っています。 ご存じの方がいましたら教えてください。 現象:同一ドメインでフォルダ階層が異なる場合にセッションが切れてしまう。 例) http://oshiete1.goo.ne.jp/aaa/a.php セッション生成 http://oshiete1.goo.ne.jp/aaa/b.php ○セッション参照 http://oshiete1.goo.ne.jp/bbb/b.php ×セッション参照 あれこれ試行錯誤して1日がつぶれてしまいました。 以下についてお教え頂けたら幸いです。 Q.別階層でもセッションは参照できるか。   上位階層でセッションを生成しないと下位階層では共有できない?   もしくは何か方法がある? 書籍などもあさったのですが、スコープについては同一ドメインであることくらいしか記述されていませんでした。 できる、できないの一言だけでもいいので、なにとぞよろしくお願いします。

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

    PHP5.3.14を使っています。 セッションについて勉強中です。 セッションを使ってページの表示回数をカウントアップするソースと、 そのセッションを破棄するソースの2種類を用意しました。 ※それぞれ、session_id()をecho表示しています。 クッキーを使った状態でこれらを動かすと、 リセットする(リンクを押してリロードする)度にセッションIDが変わるのですが、 クッキーを使わずに定義済み定数SIDを使って動かすと、 カウント値は元に戻るのですが、 リセットしてもセッションIDが変わりません。 どうすれば、新しいセッションIDを発行(SIDの値を更新)できるのでしょうか? よろしくお願いします。 【以下、ソース2種類と、iniファイルの一部です】 ●up.php <?php session_start(); if (empty($_SESSION['count'])) { $_SESSION['count'] = 1; } else { $_SESSION['count']++; } echo ("###".'"'.session_name().'='.session_id().'"'."</br>"); ?> <p> <?php echo $_SESSION['count']; ?> 回目。 </p> <p><a href="up.php">カウントアップ</A> </p> <p> <a href="reset.php">リセット</A> </p> ●reset.php <?php session_start(); echo ("###".'"'.session_name().'='.session_id().'"'."</br>"); echo ("##### ". $_SESSION['count']."回表示しました。</br>"); $_SESSION = array(); if (isset($_COOKIE[session_name()])) { setcookie(session_name(), '', time()-42000, '/'); } if(isset($_REQUEST[session_name()])){ $_REQUEST[session_name()]="" ; } session_destroy(); ?> <p> <a href="up.php">初めからカウントする</A> </p> ●php.ini (クッキーを使わずSIDを使うを設定) session.use_trans_sid = 1 session.use_only_cookies=0 session.use_cookies=0

    • 締切済み
    • 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のセッションについて質問です

    phpで会員制サイトの制作を勉強中です。 pdoでmysqlデータベースに接続しています。 セッションの「session_set_cookie_params」について質問ですが、 session_set_cookie_paramsで有効期限を設定する場合、 ログイン時にsession_set_cookie_paramsでセッションの有効期限を設定し、 他のページではsession_start()さえ記述すれば、 有効期限を過ぎると勝手にセッション変数のデータを空にしてくれるのでしょうか? それとも全てのページにsession_set_cookie_paramsを書かなければならないのでしょうか? プログラムを書いている上でセッションの動作がおかしい(有効期限が過ぎてもログアウトしない)のでsession_set_cookie_paramsの記述がおかしいのかと思い、質問しました。 また、セッション変数の有効期限を変数毎に個別に設定して削除する方法はないのでしょうか? ご回答、よろしくお願いします。

    • ベストアンサー
    • PHP
  • Sessionの上限について

    PHPでセッション情報をファイル保持にした場合、1セッションあたりのデータ量に上限はあるのでしょうか? 当然、大き過ぎても、リクエストタイムアウトなどして使い物にならないのかもしれませが、 基本的に、OSが扱う事のできるテキストファイルサイズとニアリーイコールと捉えても良いのでしょうか? RHEL4 Apache2.0 PHP4.4.7 よろしくお願い致します。

    • 締切済み
    • PHP

専門家に質問してみよう