超詳しい参考サイト
Web Design Leaves
クッキーとは?セッションとは?から始まる話は難しいので上記のサイトを参考にしてください。
最高にわかりやすいです。
ここでは使用例とセッションとクッキーの関連性に絞ります。
保存先
セッションの保存先はWebサーバーです。
クッキーの保存先はクライアントのブラウザです。
セッションはブラウザとサーバーが接続された時に session_start()によって生成されます。
| 保存先 | 変数名 | |
|---|---|---|
| セッション | Webサーバー | $_SESSION |
| クッキー | ブラウザ | $_COOKIE |
クッキー(クライアント)のセッションID
ブラウザ側にあるクッキーにはPHPSESSIDが保存されます。
例えば下のような値です。
| セッション名 | 値 | |
|---|---|---|
| PHPSESSID | '682dos0637qu0g1l8clhs9sv7a' |
WebサーバーのセッションID
Webサーバーは数多く保存しているセッションがどのクライアントに紐付くかをPHPSESSIDで判断しています。
| Webサーバー(SESSION) | ブラウザ(PHPSESSID) | |
|---|---|---|
| '682dos0637qu0g1l8clhs9sv7a' | <-----> | '682dos0637qu0g1l8clhs9sv7a' |
| '7qu0g1l8cl682dos063hs9sv7a' | ||
| 'lhs9sv7a682dos0637qu0g1l8c' |
セッション変数
セッション変数はWebサーバーに保存できる変数です。
Webサーバーに変数が保存できると何が便利なのでしょうか?
セッション変数の利点
・ページをまたいで値のやりとりができる。
・ブラウザを経由しないため改ざんされづらい。
具体例
send.phpにアクセスすると即時receive.phpに飛んで'51'を画面出力します。
<?php
session_start();
$_SESSION['id'] = '51';
//リダイレクト
header('location: ./receive.php');
<?php
session_start();
echo $_SESSION['id'];
//string -> 51
どうでしょう?うまくいきましたね!
send.phpで$_SESSION['id']を保存して、receive.phpでアクセスできました!
session_start();はセッションを使用するときのおまじないです。
各ファイルの先頭に必ず置いてください。
クッキーのセッションIDを確認する
ここで、クッキーに保存されているPHPSESSIDを確認してみましょう。
Chrome:
デベロッパーツール -> Applicationタブ -> Cookies -> URL -> Value
Safari:
Safariの準備 -> 環境設定 -> 詳細 -> メニューバーに“開発”メニューを表示
開発タブ -> Webインスペクタを表示 -> ストレージタブ -> Cookie -> 値
PHPSESSIDが確認できたでしょうか?
PHPSESSIDはそれが破棄されるまで同じ値が使用されます。
セッションの破棄
上で破棄されるまでと言いました。
それでは破棄してみましょう!(公式)
<?php
session_start();
//セッションの初期化
$_SESSION = [];
//セッションクッキーを削除
if (isset($_COOKIE[session_name()])) {
setcookie(session_name(), '', time() - 42000, '/');
unset($_COOKIE[session_name()]);
}
//セッションを破壊
session_destroy();
//ここまででPHPSESSIDもセッションも消去されています。
//リダイレクト -> send.php -> 新たなPHPSESSIDが生成される
header('location: ./send.php');
send.php, receive.php, delete_session.phpは同じフォルダに入れてください。
デベロッパーツールでPHPSESSIDを観察しながら、
send.php動作 -> delete_session.php動作で。
PHPSESSIDが生成 -> 変更 されているのが見えます!
ぜひデベロッパーツールで確認してみてください。
どうでしたでしょうか?
セッション変数の利用の一助になれば幸いです。
LGTMお願いします!
ストックのついでにお願いします!
モチベーションがあがります!