質問: **セッションの有効期限が延長される要件について調べているのですが、** **このページに記載されている「セッション」とは具体的に何を指すのでしょうか?** > > 有効期限内にセッションに再アクセスがあった場合は、期間は延長される > > > --- ・セッションファイルの意味だとしたら、$_COOKIE['PHPSESSID']は関係ないでしょうか? ・例えば下記の場合、session_start()を実行していないと思うのですが、$_SESSION変数セットを確認しただけで、セッションに再アクセスがあったことになるのでしょうか? ・あるいは、$_SESSION変数へ対して、値をセットゲットしたら、セッションへアクセスしたことになるのでしょうか? ・そもそも$_SESSION変数へアクセスすることは、セッションファイルへアクセスすることと、=でしょうか? ``` if(!isset($_SESSION)){ session_start(); } ```
回答: この記事にわかりやすく纏められていますが、 * セッションの更新:セッションファイルの更新 * 有効期限の過ぎたセッションファイルにアクセスがあった場合,**有効期限が再度延長される**.つまり有効期限切れのセッションファイルはその時点で無意味なものになるのではなく,**単にいつ削除されても構わない状態になるということを意味する**. * `session_start()`でセッションを使用したことになる。(延長もこれを基準) * > > 例えば下記の場合...... > > > => この場合 `session_start()` **する**のでアクセスがありますね。(`$_SESSION`は初期状態では未定義) ちなみにCookieはデフォルトではブラウザを閉じるまで、あるいは以下のように明示的に指定した場合は最初のアクセスからその時間まで(自動更新は工夫が必要)です。 くわしくはリンク先記事を読んで下さい。 ``` // どのバージョンでも使える書き方 ini_set('session.cookie_lifetime', 60 * 60 * 24 * 7); // PHP7.0以降で使える書き方 session_start(['cookie_lifetime' => 60 * 60 * 24 * 7]); ``` (コメントの件について) PHPのセッションはリクエスト毎に毎回呼び出さないと使用できません。例えば、次のコードを試してください。(var_dumpをブラウザで見やすくするために、あえてtext/plainにしています) ``` string(24) "2017-02-14T05:55:14+0900" } ``` 2回目: ``` セッションは空です セッションを開始します。 test.php:11: array(1) { 'current_date' => string(24) "2017-02-14T05:55:14+0900" } 現在日時を代入します。 test.php:14: array(1) { 'current_date' => string(24) "2017-02-14T05:56:02+0900" } ```