
PHPに限らず、Webプログラミングにおいてセッションの概念は避けては通れません。ユーザーがログイン・ログアウトするようなシステムが出来るのは実はセッションのおかげなのです。
この記事では、まずセッションとは何かやセッションの使い方、セッションと言うものがどういうことかと言うことと、PHPでの具体的な利用方法について説明します。
そもそもPHPって何?という方はこちらの記事をご覧ください!
$_SESSION(セッション)の使い方
PHPでは$_SESSION
というスーパーグローバール変数に現在登録されてるセッションの値が格納されています。中身は連想配列として値が保存されています。
$_SESSION(セッション)の開始宣言
セッションを扱うためにはsession_start
関数を使用してセッションをスタートします。
<?php
session_start();
?>
$_SESSION(セッション)の保存方法
セッション情報は$_SESSION
に連想配列(キーと値のペア)で保存されます。セッションに値を登録するには以下のように記述します。
$_SESSION['キー'] = 値;
セッションでサイトにアクセスした数をカウントする処理をカウントします。
<?php
session_start();
$count = $_SESSION['count'] ?? 0;
$_SESSION['count'] = $count + 1;
echo $count;
これでサイトにアクセスするとカウントアップされる処理ができました。 session_start
でセッション処理を開始すれば$_SESSION
を連想配列のように使い回すことができるようになります。
$_SESSION(セッション)の削除方法
キーを指定してセッションを削除する場合はunset
を使用します。
unset($_SESSION['count']);
全てのセッションを削除したい場合は、$_SESSION
に空配列を設定することで削除されます。
$_SESSION = [];
session_destroy
関数を使ってもセッションを全て削除することができますが、セッション変数の利用を再開するには session_start()
をもう一度呼び出す必要があります。
$_SESSION(セッション)の有効期限
セッションには有効期限がありデフォルトではブラウザを閉じるとデータも破棄されます。 ブラウザを閉じてもセッションを保持し続けるためにはcookie_lifetime
を設定します。
<?php
// セッションの有効期限を30日にする例
session_start([
'cookie_lifetime' => 60 * 60 * 24 * 30,
]);
?>
Sessionのセキュリティについて
セッション情報にはログインなどの機密情報が設定されていることが多く、セッションIDを盗まれるとログイン状態をそのまま他人に乗っ取られてしまします(セッションハイジャック)。
Sessionを乗っ取ってみよう
実際にセッションを乗っ取るサンプルを紹介します。 ChromeのDeveloperToolを開きApplicationを選択します。
この中にあるPHPSESSID
の値をコピーしておきます。
シークレットモードで先ほどのカウント処理を開くと値が初期化されてますが、同じくDeveloperTookを開きPHPSESSID
の値を先ほどコピーした値に書き換えるとカウントアップの値が変わります。
たったこれだけで、別ユーザーが使っているセッション情報を盗むことができるのです。 対応としては通信の暗号化やアクセス毎にsession_idを変更したりするなど対応はありますが長くなるのでここでは紹介しません、環境に合わせたセキュリティ対応を行うようにしましょう。
まとめ
今回はセッションの使い方について解説しました。WEBシステムにおいて、ユーザごとの情報を保持し続けることのできるセッションは非常に重要です。セッションの使い方を忘れてしまったら、この記事を思い出して下さい。
なお、他の言語やフレームワークでも同じようなセッション管理を行っています。興味のある方は以下の記事も参考にしてみてください。
プログラミングを学んでみたいという方にオススメ
プログラミングに関して右も左もわからないという方必見!!
今後転職を目指してスキルを身に着けたいという方は、プログラミングスクールの無料カウンセリングから受けてみてはいかがでしょうか??
エンジニアとしての一歩を踏み出しましょう!