セッションを利用すれば、複数ページに渡ってデータを受け渡すことができます。ウェブサービスにおいては、ユーザに関する情報を保持する場合などに使われています。セッションによって、サービスを利用している間のユーザの動きを管理しているとも言えます。
もう少し抽象的に言えば、「セッション」はある特定のクライアントとサーバとの間に行われる一つの行動単位として捉えることができます。例えば「ログインしている間の買い物」がそうです。HTTPプロトコルはクライアントの要求に対してサーバが応答すると、そこで一端切断されてしまいます。そこで複数ページに渡ってデータを受け渡すためにあるのが、このセッションとよばれる機能なのです。
スポンサーリンク
仕組み
セッションは、セッションIDと呼ばれるユニークなIDを元に実行されています。
セッションが設定されたページに初めて訪れると、サーバからセッションIDが発行され、サーバ上にそのIDが名前に付けられたセッションファイルが作成されます。それと同時に、そのIDがクライアント側のブラウザのクッキーにも保存されます。このようにしてWebクライアントとサーバとの間にIDがひも付けされるとユーザを特定することができ、セッションの管理ができるというわけです。
今回作成するのは、以下のような簡単な遷移を持つセッション管理です。
初めのページ(session1.php)に訪れ、リロードすると「ウェブの葉さん、こんにちは」と表示されます。次のページ(session2.php)へ進むとセッション名などが表示され、さらに破棄ページ(session3.php)へと遷移するとセッションが破棄されます。
手順
session1.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
<?php session_start(); header("Content-type: text/html; charset=utf-8"); echo "<p>サーバ/セッションIDは " . session_id() ." です。</p>"; echo "<p>クッキー/セッションIDは " .$_COOKIE['PHPSESSID'] ." です。</p>"; if (!isset($_SESSION['name'])){ echo "<p>こんにちは!ページをリロードして下さい。</p>"; $_SESSION['name'] = "Webの葉"; }else{ echo "<p>".$_SESSION['name'] ."さん、こんにちは</p>"; echo "<a href='session2.php'>次ページへ</a>"; } ?> |
4行目
セッションはsession_start()で開始します。
この時に、サーバはクライアント側のクッキーを調べます。もしセッションIDのクッキー(セッションクッキー)が存在しなければ発行します。
6行目
サーバ上で発行されたセッションIDが表示されます。
7行目
はじめてこのページを訪れた時は(もしくはセッション切れの時)、クライアント側のクッキーは存在していないので、IDは無表示になっています※。PHPSESSIDはデフォルトで用意されているセッション名です(セッションIDとセッション名は違います)。リロードするとクライアント側にクッキーとして書き込まれ表示されるようになります。
※はじめは、クライアント側のセッションIDは空白になっている。
9〜13行目
セッションはスーパーグローバル変数$_SESSIONにデータを格納します。
まだ$_SESSION[‘name’]には何も保存されていない場合、ここでは「ウェブの葉」という名前を保存しています。
16行目
ページをリロードすると、$_SESSION[‘name’]には既にウェブの葉という名前が保存されているので、その名前が18行目の次ページへのリンクとともに表示されます。
session2.php
1 2 3 4 5 6 7 8 9 10 11 12 |
<?php session_start(); header("Content-type: text/html; charset=utf-8"); echo "<p>".$_SESSION['name'] ."さんの部屋</p>"; echo "<p>セッションIDは " . session_id() ." です。</p>"; echo "<p>セッション名は " . session_name() ." です。</p>"; echo "<a href='session3.php'>セッションを破棄する</a>"; ?> |
6行目
前画面から引き継いだ$_SESSION[‘name’] が表示されます。
8行目
セッション名が表示されます。デフォルトではPHPSESSIDが表示されます。
session3.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
<?php session_start(); header("Content-type: text/html; charset=utf-8"); //セッション変数を全て解除 $_SESSION = array(); //セッションクッキーの削除 if (isset($_COOKIE["PHPSESSID"])) { setcookie("PHPSESSID", '', time() - 1800, '/'); } //セッションを破棄する session_destroy(); echo "<p>セッション終了</p>"; echo "<a href='session1.php'>はじめのページへ</a>"; ?> |
7〜15行目
セッションを切断するには、セッション変数を全て解除し破棄します。そしてクッキーも削除します。
関連ページ