超詳しい参考サイト
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お願いします!
ストックのついでにお願いします!
モチベーションがあがります!