PHP セッション 調べてみた
セッションとは
セッションとは、Webサイトにアクセスしてからサイトを閉じるまでの一連の流れのことをいいます。
OSI基本参照モデルでいうと、第5層のセッション層の部分のことです。
しかしWebサイトでセッションという時は、しばしばWebサーバーにユーザー情報などが保存される仕組みを指すことも珍しくありません。
今回は、こちらの保存される仕組みとしてのセッションを主に紹介していきます。
セッションとクッキー
セッションとよく似た仕組みにクッキーがあります。
セッションとクッキーは、情報が保存される場所に違いがあります。
セッションはサーバーに保存されるのに対し、クッキーはブラウザに情報が保存されます。
セキュリティの観点から、重要な情報はクッキーに保存するのではなくセッションに保存します。
仮にクッキーに情報を保存していると、ユーザーの方で値を書き換えることができてしまうからです。
しかし、セッションを利用する場合でもクッキーを全く使わないわけではありません。
セッションを使う場合は、クッキーにセッションIDを保存します。
この点を少し詳しく紹介します。
セッションはブラウザとWebサーバを繋いでいる筒のようなイメージです。(私の勝手なイメージですが・・・)
この筒はWebサイトを開いてから閉じるまで同じものが使われます。逆をいえば、Webサイトを閉じると使われていた筒もなくなってしまいます。
これでは、Webサーバーに情報を保存したとしても、筒がないのでブラウザはその情報を受け取ることができません。
そこで、セッションIDを利用します。
セッションIDとは、筒に付けられた一意のIDのことです。
Webサイトをリクエストする時に、このセッションIDもクッキーとしてWebサーバーに渡すことで、以前使用されていたセッション(筒)でブラウザとWebサーバーとつなぐことができ、結果的にWebサーバーに保存されている情報を取得することができます。
これが、クッキーにセッションIDが保存される仕組みとセッションで情報が保存できる仕組みになります。
PHPでセッションを扱う
では、PHPでセッションを扱う方法を紹介していきます。
PHPでセッションを開始するには、以下コードを使用します。
session_start();
これでセッションが開始されます。
また、クッキーにセッションIDが自動で追加されます。
追加されたセッションIDは以下コードで確認することができます。
echo $_COOKIE['PHPSESSID'];
セッションに情報を追加するには以下コードを使用します。
$_SESSION['username'] = 'testuser'; //usernameは任意の名前を入れる
これで$_SESSION['username']
を参照すると「testuser」が返されます。
保存されたセッションを削除するには、以下コードを使用します。
unset($_SESSION['username']);
上記のコードで、一連のセッションの操作ができます。
しかし、この方法ではセキュリティ面で盤石とはいえません。
セッションIDが常に同じであるため、セッションIDが取られてしまうとWebサーバーに保存されている情報も取られてしまいます。
これらのセッションを狙った攻撃を、「セッションハイジャック」といいます。
セッションハイジャックの対策として、セッションIDを毎回発行する仕様にします。
毎回新しいセッションIDを作成するには、以下コードを使用します。
session_regenerate_id();
以上!!!!!!!