普段何気なく使っている機能や言葉を整理する備忘録第2弾です。
第1弾はこちら=> Cookieの話
HTTPプロトコルでのセッションについてまとめます。
参考
https://qiita.com/hththt/items/07136ad74127999df271
https://www.ipa.go.jp/security/awareness/administrator/secure-web/chap6/6_session-1.html
https://techracho.bpsinc.jp/hachi8833/2018_09_19/61260
https://umaroidblog.com/webtechnology1
セッションとは?
あるユーザーがあるサイトにログインしたとき〜ログアウトするまでの一連の操作のこと。
(語弊があるかもしれませんが、あくまでイメージとしてということで…)
例えばあるユーザーがログインしたあと、サイトのTOPページが表示されたとします。
この時点で接続が切れていますが、HTTPはステートレスなため、前の接続の状態を記憶しません。
よってもう一度ページにアクセスがあってもそれが先ほどログインしてきた人かどうかはわかりません。
これを実現するための仕組みを一般的に「セッション管理」と言います。
よく使われるのがセッションIDを照合する方法です。
- クライアントからサーバーに接続するときに無作為な英数字(これがセッションID)を生成、サーバーに送ります。
- サーバーでこのIDを保存します。
- 接続があるたびに保存してあるIDと照合し、それと合致するユーザーとして認識します。
この際セッションIDのやりとりにCookieがよく使われます。
cakephp3で使うならこんな感じ
公式ドキュメントこちら
https://book.cakephp.org/3/ja/development/sessions.html
設定
/config/app.php
にsession情報をどう保存するかの設定ができます。
大抵PJを作ったらデフォルトで設定されてるはず
Configure::write('Session', [
'defaults' => 'php',
'ini' => [
'session.cookie_path' => '/', //情報の保存先パス
'session.cookie_domain' => '.yourdomain.com' //対象のドメイン
'session.cookie_lifetime' => 1800 //タイムアウト時間
]
]);
な感じ。
主な操作
$session = $this->getRequest()->getSession();
//読み込み
$name = $session->read('User.name');
//書き込み
$session->write('Config.language', 'en');
//存在チェック
if ($session->check('Config.language')) {
// Config.language が存在し null ではない。
}
//破棄
$session->destroy();