セッション
概要
セッションとはサーバーにデータ保存することができる機能です。
特性
セッションには以下の特性があります。
機密性が高い
セッションはサーバー側にデータを保存するので安易にデータの中身を 確認することや変更することができません。 なので、パスワードのなどの機密性の高いデータや変更されたくないデータに適しています。
ブラウザが変わると無効
次の項目で説明しますが、セッションは各ブラウザのクッキーと 結びついているため、ブラウザが異なるとセッションは無効となります。
保存サイズの制限がない
セッションに保存するデータのサイズに制限はありません。 ただ、サーバー側の容量を圧縮することになるので、 大きすぎるデータの保存には注意が必要です。
セッションの仕組み
セッションはクッキーにユニークIDを設定しており、 クッキーはサーバーにアクセスする際にそのIDを通知しています。 これによって、セッションは誰からアクセスされたかを把握できるようになり、 その結果該当するデータを$_SESSIONに反映できています。
セッションの流れ
セッションは1回目のアクセスと2回目以降のアクセスでは流れが異なります。
順番 | 内容 |
---|---|
① | ユーザーがサーバーにアクセスする |
② | サーバーでセッションを開始する |
③ | ユーザーのクッキーの値をチェックする |
④ | クッキーに値がない(初めての訪問)場合は セッションIDを生成してクッキーに保存する |
⑤ | webページ表示処理 |
⑥ | webページ終了時にサーバーに$_SESSIONの内容を保存する |
順番 | 内容 |
---|---|
① | ユーザーがサーバーにアクセスする |
② | クッキーからセッションIDを取得する |
③ | セッションIDをもとにしてIDと関連付けられているデータを サーバーから取得し、$_SESSIONに反映する |
④ | webページ表示処理 |
⑤ | webページ終了時に$_SESSIONの内容をサーバーに保存する |
使い方
セッションを使用するためにはsession_startを使用します。
関数内容 | セッションを開始します。 この関数を使用していない場合、$_SESSIONは通常の変数扱いになるので、 次の起動まで値が保存されていることはありません。 ※オプション引数が多数ありますが、多すぎるので省略しています。 |
---|
使用例
以下のようにセッションはサーバー側で保存されるので php間の値渡しで使用したり、ユーザーの訪問をカウントしたりできます。// php間の値渡し // StartSession.php <?php session_start(); $_SESSION["user_name"] = "山田太郎"; ?> // SessionCheck.php <?php session_start(); echo $_SESSION["user_name"]; ?>
// 訪問回数カウント // Visit.php <?php session_start(); if (isset($_SESSION["visit"]) == false) { $_SESSION["visit"] = 0; } $_SESSION["visit"] += 1; echo "あなたが訪れた回数" . $_SESSION["visit"]; ?>
注意点
session_startを使用していない場合、$_SESSION変数は使用できません。
例
以下の例のphpを順番に実行するとsession_error_02.phpで 「Notice: Undefined variable: _SESSION」というエラーが出ます。 これはセッションが開始されていないので$_SESSION変数が 宣言されていないというエラーメッセージです。// session_error_01.php <?php session_start(); $_SESSION["session_error"] = "test"; ?> // session_error_02.php <?php echo $_SESSION["session_error"]; ?>
「session_error_02.php」にsession_startを追加して実行してみます。// session_error_02.php <?php session_start(); echo $_SESSION["session_error"]; ?>
session_startを追加した結果、「session_error_01.php」で設定した 「test」という文字が無事表示されました。 このようにsession_startを使用しないと$_SESSION変数が 機能しなくなるので注意して下さい。
削除
セッションの削除を行う場合、unsetまたはsession_destroyを使用します。
unset
unsetは引数に削除したいセッションデータを指定することで 指定したデータのみを削除する関数です。
関数内容 | 引数で指定したデータの割り当てを解除します。 ※1.第2引き数以降も破棄する変数を指定できます。 ※2.セッションのみならず他のデータでも使用可能です。 |
---|
引数 | 説明 |
---|---|
第1引数 | 破棄する変数 |
第2引数以降 | 別の破棄予定の変数 |
使用例
// unset_check_01.php
<?php
session_start();
$_SESSION["user_name"] = "test";
unset($_SESSION["user_name"]);
// unset_check_02.phpにリダイレクト
header("Location: unset_check_02.php");
?>
// unset_check_02.php
<?php
session_start();
echo $_SESSION["user_name"];
?>
unset_check_01.phpを実行するとリダイレクトされた
unset_check_02.php内でUndefineエラーが発生しますが
これはunsetにて$_SESSION["user_name"]を削除したので
unset_check_02.phpで$_SESSION["user_name"]は
存在しないために発生しています。
session_destroy
session_destroyを使用した場合セッションIDに 関連付けられているデータすべてを破棄します。
関数内容 | セッションIDに関連付けられているデータ($_SESSION)を 全て破棄します。 |
---|
戻り値 | 削除結果 成功(true) |
---|
使用例
// session_destroy_check_01.php
<?php
session_start();
$_SESSION["user_name"] = "test";
session_destroy();
// session_destroy_check_02.phpにリダイレクト
header("Location: session_destroy_check_02.php");
?>
// session_destroy_check_02.php
<?php
session_start();
echo $_SESSION["user_name"];
?>
こちらもunsetと同じようにsession_destroy_check_01.phpを実行後
リダイレクトされた先のsession_destroy_check_02.phpでundefineエラーが発生します。
session_destroyで、$_SESSIONの内容が破棄されたからです。