セッション情報
セッション情報とは
サーバー側にデータを保存するセッション情報
- プログラミング言語やライブラリによって提供されているセッション機能を使うと、サーバー上にユーザーに関するデータを保持できます
セッションIDで保存域を区別する
- セッション機能は、プログラミング言語やライブラリによって提供される、「ユーザーごとに用意されるサーバー上のデータ保存領域」です
- セッション機能に対応するプログラミング言語やライブラリでは、アクセスしてきたクライアントごとに、「セッションID」と呼ばれる
- ランダムな文字列を渡して、クライアントごとに「セッションID」と呼ばれる
- そしてセッションIDごとに、データの保存領域を当てます
- つまり、クライアントの数だけサーバーに保存域を作り、そこにWebプログラムから自由に値を保存できるようにしたものがセッション情報です
- セッション情報に保存する内容は、クライアントから見えないので偽装の心配がありません
セッションを使った実例
- PHPでセッションを使うには、最初に「session_start関数」を呼び出す必要があります
<?php // セッションを開始する session_start();
- 値を格納するには「$_SESSION」変数に代入します
<?php $ordervalue = $_POST[ 'order' ]; $_SESSION[ 'order' ] = $ordervalue;
- 値を削除した時には、「unset関数」を呼び出します
<?php // 選択されていないとき。削除する unset($_SESSION[ 'order' ]);
《order.php》
<?php // セッションを開始する session_start(); if (!isset($_POST[ 'order' ])) { // 選択されていないとき。削除する unset($_SESSION[ 'order' ]); } else { // 選択されているとき $ordervalue = $_POST[ 'order' ]; $_SESSION[ 'order' ] = $ordervalue; } ?> <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>セッション情報を使った例</title> </head> <body> <p>商品を設定しました。</p> <p><a href="settle.php">決済ページへ</a></p> </body> </html>
セッションから値を参照する
- 読み取る場合も、最初に「session_start関数」を呼び出す必要があります
《settle.php》
<?php // セッションを開始する session_start(); if ((!isset($_SESSION[ 'order' ])) || ($_SESSION[ 'order' ] == '')) { echo '商品が選択されていません'; } else { $ordervalue = $_SESSION[ 'order' ]; echo $ordervalue . 'の購入手続きを進めます'; } ?> <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>セッション情報を使った例:決済ページ</title> </head> <body> <p>決済ページ</p> <p><a href="item.php">商品を選択し直す</a></p> </body> </html>
セッションIDを見る
セッションのタイムアウト
セッションを使う場合の注意点
- セッションハイジャック(第三者がセッションIDを盗むことで、なりすまし攻撃をすること)
- セッションIDは盗まれるものだと諦め、重要な情報の前にはもう一度「ユーザー名」と「パスワード」を再入力させるようにする
セッションを終了させる
- session_destroy関数を実行する
<?php session_destroy(); $_SESSION = null; // セッション変数を初期化 setcookie( session_name(), null, 0, '/' );// セッション・クッキーを削除