LoginSignup
0
0

More than 3 years have passed since last update.

セッションの話

Posted at

普段何気なく使っている機能や言葉を整理する備忘録第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を照合する方法です。

  1. クライアントからサーバーに接続するときに無作為な英数字(これがセッションID)を生成、サーバーに送ります。
  2. サーバーでこのIDを保存します。
  3. 接続があるたびに保存してある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();
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0