PHP初心者のためのセッション入門
このページではPHPにおけるセッションについて解説しています。
セッションとはユーザ情報をサーバ側で保存する技術です。
セッションを使わないと、例えばログインが必要なすべてのページでユーザはIDやパスワードを送信する必要が出てきます。
セッションを使うと、ユーザのログインしたという情報を保存できるので、一度ログインすればどのページでもログイン済みユーザとして扱えます。
セッションを例えるなら銀行や役所の整理券システムのようなものです。受付を一旦離れても、また整理券を提示すれば、相手はどこまで手続きが済んだのかを整理番号で把握しているので、話が早いというわけです。
このやり取りをウェブサーバとブラウザで行うための技術がセッションです。
セッションの仕組み
PHPのセッションの仕組みを簡単に説明します。
PHPは重複しないIDを生成して、そのセッションIDと通信相手とを紐付けることで、ユーザを判別するという仕組みになっています。
セッションIDは自動で生成され管理されるので、PHPスクリプトを作成するときにセッションID自体を記述する必要はありません。セッションを利用する「session_start」という関数を使うだけです。
セッションの仕組みはCookieという技術によって実現されています。
CookieとはウェブサーバとブラウザがHTTP通信でウェブページをやり取りするときに、ブラウザに少量のデータを保存させる技術です。
PHPはCookieにセッションIDを保存し、次回のアクセスでそのCookieのセッションIDを読み取ることで、ユーザの判別を実現しています。
セッションの使い方
PHPでのセッションの使い方は簡単で、次のように「session_start」という関数を使うだけです。
<?php session_start(); $_SESSION["from"]="受付"; ?>
セッションをスタートしたら、保存したい情報を特別(スーパーグローバル)な変数「$_SESSION」に格納します。サンプルでは「from」としていますが、名前は何でも構いませんし、いくつでも作れます。
セッションを終了したいときは「session_destroy」という関数を使います。
<?php session_start(); session_destroy(); ?>
この関数はサーバ上のセッションデータを破棄します。
セッションの安全性
少しだけセッションの安全性を考えて手直ししてみましょう。
session_regenerate_idという関数を使うと、セッションIDを変更することができます。
<?php session_start(); session_regenerate_id(true); 〜〜 ?>
例えば整理番号を誰かに知られた場合、自分の代わりに整理番号を提示されて勝手に手続きを進められてしまう可能性があります。これをセッションハイジャックと呼びます。
セッションIDを変更すれば、誰かに盗み見られて成りすまされる可能性が低くなり、安全性が高まります。
ちなみに引数をtrueにすると、サーバ上のセッションデータを破棄します。
セッションの終了時、session_destroyを使うとサーバ上のセッションデータは破棄されますが、スクリプト内の$_SESSION内のデータはそのままです。
<?php session_start(); $_SESSION=array(); session_destroy(); 〜〜 ?>
セッションを終了するだけのスクリプトであれば問題ありませんが、他にも色々と処理をする場合のことも考えて、間違えて終了済みのセッション情報を使ってしまうことがないように、念のためこのようにセッションを空の配列で初期化しておくと安全性が高まります。