概要
セッション開始時
- セッション開始時、サーバー側でセッションIDを生成する
- サーバーはセッションIDをサーバー内に保存し、それをクライアントにCookieで保存する
- クライアントはセッションIDをサーバーに送り、継続中のセッションでの接続を要求する
- サーバーは送られてきたセッションIDのセッションが生きていればそのセッションで接続を続ける
セッション処理中
- サーバーはセッション変数を通して必要な情報を得たりセットしたりする
- セッション継続中、セッション変数の内容は保持される
セッション終了時
- セッション変数をクリアする
- クライアント側のセッションクッキーを完全に削除する
- session_destroy()を実行する
処理の流れ
継続中セッションの確認
セッション中かどうか確認する必要がある場合、以下で確認。
isset($_COOKIE[session_name()])
セッション開始
session_start()
を実行する- セッションで使用しているセッション変数(
$_SESSION['キー']
)が定義されているか確認する- 定義されていなければセッション変数を定義してセッション開始
- 定義されていればセッション継続
セッション終了時
session_start()
を実行する- セッション変数をクリア
($_SESSION = []
) setcookie()
でクライアントのセッションクッキーを削除session_destroy()
を実行
セッションクッキーの名前はsession_name()
で得られる。
セッションクッキーの削除
一般的なクッキーの削除は第3引数まで設定すればよいが、セッションクッキーの削除は第4引数のpathまで指定する必要がある。通常、セッションクッキーのパスはドキュメントルート('/'
)。
setcookie(session_name(), '', 0, '/')
さらにクライアント上のサーバーに関するドメインやセキュリティー設定情報も確実に消すために、session_get_cookie_params()
で取得したパラメーターをsetcookie()
の全引数に設定するのがよい。
1 2 3 4 5 |
$params = session_get_cookie_params(); setcookie(session_name(), '', 0, $params["path"], $params["domain"], $params["secure"], $params["httponly"]); |