Apache+PHPによる+PostgreSQLによるWebアプリケーション
−入門編−
第8章 セッション管理

8.1 セッションの開始

■セッション

 Webサーバは、あるWebページから別のWebページへのアクセスは独立の状態として扱います。同じページへ再度アクセスしても独立の状態として扱います。ところがWebアプリケーションでは、一つのサービスを構成するWebページへのアクセスは同一の状態として扱いたい場合があります。このような状態を「セッション」といいます。PHPにはセッション管理機能がありこのような状態を管理することが可能となります。

■セッションの開始と管理

 あるページにアクセスした時点からセッションの管理を始めるには、そのページの冒頭でsession_start()関数を呼び出します。引数は不要です。session_start()関数が呼び出されると、Webサーバ内でセッションIDが生成され、Webサーバ内に保存されます。セッション名はsession_name()関数で確認できます。セッションIDはsession_id()関数で確認できます。保存先のディレクトリはsession_save_path()関数で確認できます。

 サンプルをリストsession_start1.phpに示します。

リスト session_start1.php

<?php
// セッションの開始
session_start();
?>
<html>
<head>
<title>session_start1.php</title>
<!-- セッションの開始:セッションIDの確認 -->
</head>
<body>
<?php
 print "session_id = " . session_id() . "<br>";         // セッションIDの確認
 print "session_name = " . session_name() . "<br>";    // セッション名の確認
 print "session_save_path = " . session_save_path() . "<br>";
                             // セッション情報格納ディレクトリの確認
?>
</body>
</html>

 session_start1.phpファイルにアクセスすると、次図のようにセッションID等が表示されセッションが開始していることが確認できます。

 セッション情報はWebサーバの/tmp/ディレクトリに格納されています。このディレクトリ内のファイルのリストを下記に示します。ファイル名が「sess_セッションID」のファイル名が確認できます。このファイルの中にはユーザが定義したセッション変数が格納されます。現時点ではセッション変数が定義されtれいないので空です。

[root@igux /tmp]# ls
orbit-root/ sess_f14895297cc2e1b47d484d3aa9aceb2f
[root@igux /tmp]#

■セッション変数の登録

 セッション内で共有できるセッション変数は、以下の書式で登録します。$_SESSIONは配列型のグローバル変数です。

$_SESSION["s_name"]=$name;    

 サンプルをリスト session_start2.phpに示します。

リスト session_start2.php

<?php
// セッションの開始
session_start();
?>
<html>
<head>
<title>session_start2.php</title>
<!-- セッションの開始:セッション変数の登録 -->
</head>
<body>
<?php
 print "session_id = " . session_id() . "<br>";         // セッション変数の出力
 if (isset($_POST["name"])) {
   $name = $_POST["name"];
   $_SESSION["s_name"]=$name;               // セッション変数の登録
   print "ようこそ!" . $_SESSION["s_name"] . "さん。<br>";
   print_r($_SESSION);
 } else {
?>
   <form method="post">
     氏名を記入してください。<br>
     氏名:<input size="30" type="text" name="name"><br>
   <input type="submit" value="登録">
   </form>
<?php
 }
?>
</body>
</html>

 session_start2.phpファイルにアクセスすると、下図のようなWebページが表示されます。セッションが開始され、セッションIDは図に表示された値です。氏名を記入して「登録」ボタンをクリックします。

 session_start2.phpファイルで<form>タグでaction属性が省略されているので、「登録」ボタンをクリックすると、自分自身のファイルに再度アクセスします。その結果、下図のようなWebページが表示されます。セッション変数に値が代入されているのがわかります。

 Webサーバ内の/tmpディレクトリには、2個のセッションファイルができています。

[root@igux /tmp]# ls -l
total 2
drwx------ 2 root  root 1024 Jun 19 15:47 orbit-root/
-rw------- 1 nobody nobody 20 Jun 20 13:25 sess_5fb6b70b37b53114518ce19ac215e8ea
-rw------- 1 nobody nobody 0 Jun 20 13:25 sess_6f50f7a6dbf62daa44e8e97fe11d6765
-rw-r--r-- 1 root  root   0 Jun 20 13:25 typescript
[root@igux /tmp]# cat sess_5f*
s_name|s:6:"yamada";[root@igux /tmp]#

 

 2度目のセッションファイル sess_5fb6b70b37b53114518ce19ac215e8eaの内容は「s_name|s:6:"yamada" ;」となっています。つまり、以下の書式で、セッション変数に関するデータが格納されています。

変数名|型識別:値;

 ところで、session_start2.phpファイルへの1回目のアクセスのときのセッションIDと2回目のアクセスのときのセッションIDが異なるのが分かります。つまり、1回目のアクセスと2回目のアクセスでは別のセッションとして管理されていたことになります。これは、session_start2.phpファイルに1回目にアクセスしたときに生成されたセッションIDが、2回目のアクセスのときにsession_start2.phpファイルに引き渡されなかったためです。

 

 


前へ | 目次へ |次へ  | YCポータルサイト

執筆 山田豊通
更新日:2003年6月4日