PHP でのセッション変数の使い方を調べた。

セッション変数を使うには、session_start を各ページの先頭で呼び出す。
マニュアルには「session_start()は、セッションを作成します。 もしくは、リクエスト上で GET, POST またはクッキーにより渡されたセッション ID に基づき現在のセッションを復帰します。」とあり、基本的には session_start を各ページの先頭で呼び出すだけでいい。
<?php
// page1.php
 
//session_name("sessid");
//session_id('abc123');
session_start();
 
echo 'Welcome to page #1';
 
$_SESSION['favcolor'] = 'green';
$_SESSION['animal']   = 'cat';
$_SESSION['time']     = time();
 
echo '<br /><a href="page2.php">page 2</a>';
echo '<br /><a href="page3.html">page 3</a>';
?>
上のような php を表示したときのレスポンスヘッダーを確認すると、以下のように「Set-Cookie: PHPSESSID=e6rbiboadpl6i8isuhcsgslne6; path=/」という行が含まれている。これでクライアント側のクッキーにセッションIDを保持するようになる。
クッキー名の「PHPSESSID」はPHPのデフォルトだが、php.ini で設定することができる。また実行時にも session_name 関数で設定できる。上のコードサンプルではコメントにしている。
セッションIDの「e6rbiboadpl6i8isuhcsgslne6」の部分は PHP が適当に生成する値だが、実行時に session_id 関数で好きな値を設定することもできる。同じく上のコードサンプルではコメントにしている。

session_test_page1.jpg

page2.php のリンクをクリックする。
<?php
// page2.php
 
session_start();
 
echo 'Welcome to page #2<br />';
 
echo $_SESSION['favcolor']; // green
echo $_SESSION['animal'];   // cat
echo date('Y m d H:i:s', $_SESSION['time']);
 
?>
page2.php を表示したときのリクエストヘッダーを確認すると、次のように「Cookie:PHPSESSID=e6rbiboadpl6i8isuhcsgslne6」という行が含まれている。つまりセッションIDをサーバーに渡している。
また、page2.php の先頭で session_start の関数を呼び出しており、ここで セッションIDに基づいてセッション変数を復帰している。

session_test_page2.jpg

ajax での GET のときはどうかというと。。。
次に page1.php の page3.html のリンクをクリックする。
<!-- page3.html -->
<script src="http://code.jquery.com/jquery-1.10.1.min.js"></script>
<script type="text/javascript">
    $(document).ready(function (){
        $.ajax({  
            type:"GET",
            url:"page3.php",
            data: "a=" + 12,
            timeout: 3000, 
            success: function(data) {
                $("#content").append(data);
            },
            error: function(request, status, err) {
                if(status == "timeout") {
                    $("#content").html("timeout error.");
                }
            }
        });
    });
</script>

Welcome to page #3<br />
<div id="content">
page3.html は中身を ajax で取得している。
<?php
// page3.php
 
session_start();
 
echo $_SESSION['favcolor']; // green
echo $_SESSION['animal'];   // cat
echo date('Y m d H:i:s', $_SESSION['time']);
 
?>
page3.php を呼び出すときのリクエストヘッダーを確認すると、やはり「Cookie:PHPSESSID=e6rbiboadpl6i8isuhcsgslne6」という行が含まれている。

session_test_page3.jpg

以上。