32610


**セッションの有効期限が延長される要件について調べているのですが、**  
**[このページ](http://thk.kanzae.net/net/itc/t4082/)に記載されている「セッション」とは具体的に何を指すのでしょうか？**

> 有効期限内にセッションに再アクセスがあった場合は、期間は延長される

* * *

・セッションファイルの意味だとしたら、$_COOKIE['PHPSESSID']は関係ないでしょうか？  
・例えば下記の場合、session_start()を実行していないと思うのですが、$_SESSION変数セットを確認しただけで、セッションに再アクセスがあったことになるのでしょうか？  
・あるいは、$_SESSION変数へ対して、値をセットゲットしたら、セッションへアクセスしたことになるのでしょうか？  
・そもそも$_SESSION変数へアクセスすることは、セッションファイルへアクセスすることと、＝でしょうか？

[code]

    if(!isset($_SESSION)){ 
      session_start(); 
    }
    
[/code]


CC BY-SA 3.0
2017-02-12T16:11:18.883
32609
2017-02-13T20:57:36.550
7886
question
php
「有効期限内にセッションに再アクセスがあった場合は、期間は延長される」のセッションとは？


[この記事](http://qiita.com/mpyw/items/7852213f478e8c5a2802#%E6%9C%89%E5%8A%B9%E6%9C%9F%E9%99%90%E3%81%A3%E3%81%A6%E3%81%A9%E3%81%86%E3%81%AA%E3%81%A3%E3%81%A6%E3%82%8B%E3%81%AE)にわかりやすく纏められていますが、

  * セッションの更新：セッションファイルの更新
  * 有効期限の過ぎたセッションファイルにアクセスがあった場合， **有効期限が再度延長される** ．つまり有効期限切れのセッションファイルはその時点で無意味なものになるのではなく， **単にいつ削除されても構わない状態になるということを意味する** ．
  * `session_start()`でセッションを使用したことになる。(延長もこれを基準)
  * > 例えば下記の場合……

=> この場合 `session_start()` **する** のでアクセスがありますね。(`$_SESSION`は初期状態では未定義)

ちなみにCookieはデフォルトではブラウザを閉じるまで、あるいは以下のように明示的に指定した場合は最初のアクセスからその時間まで(自動更新は工夫が必要)です。  
くわしくはリンク先記事を読んで下さい。

[code]

    // どのバージョンでも使える書き方
    ini_set('session.cookie_lifetime', 60 * 60 * 24 * 7);
    
    // PHP7.0以降で使える書き方
    session_start(['cookie_lifetime' => 60 * 60 * 24 * 7]);
    
[/code]

* * *

(コメントの件について)  
PHPのセッションはリクエスト毎に毎回呼び出さないと使用できません。例えば、次のコードを試してください。(var_dumpをブラウザで見やすくするために、あえてtext/plainにしています)

[code]

    <?php
    
    header( 'Content-Type: text/plain' );
    ini_set( 'html_errors', 0 );
    
    if ( empty( $_SESSION ) ) {
        echo 'セッションは空です' . PHP_EOL;
    //  var_dump($_SESSION); // Notice: Undefined variable: _SESSION
        echo 'セッションを開始します。' . PHP_EOL;
        session_start();
        var_dump( $_SESSION );
        echo '現在日時を代入します。' . PHP_EOL;
        $_SESSION['current_date'] = date( DATE_ISO8601 );
        var_dump( $_SESSION );
    } else {
        echo 'セッションは存在します' . PHP_EOL;
        var_dump( $_SESSION );
    }
    
[/code]

何度もリロードしてみてください。  
初期状態ではセッションは読み込まれないので、「セッションは存在します」に到達することはありません。

初回：

[code]

    セッションは空です
    セッションを開始します。
    test.php:11:
    array(0) {
    }
    現在日時を代入します。
    test.php:14:
    array(1) {
      'current_date' =>
      string(24) "2017-02-14T05:55:14+0900"
    }
    
[/code]

2回目:

[code]

    セッションは空です
    セッションを開始します。
    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"
    }
    
[/code]


CC BY-SA 3.0
2017-02-12T16:59:43.533
32610
2017-02-13T20:57:36.550
2017-02-13T20:57:36.550
2376
2376
32609
answer