session
Webのやつ
session
sessionは、特定ユーザーの情報を決められた期間だけ保存しておく入れ物
ログインしているあいだ保持されるsessionはログインセッションと呼ばれる
ECサイトで、買い物かごの中身を入れておくといった、一時的なデータの保存にも使われる
cookieのsession token
セッションデータの実体へのポインタとして、tokenをcookieに持たせておく
名前は何でも良いけど、Djangoのデフォルトでは sessionid が使われる
漏洩防止のために名前を変更できるけれど、すぐにばれてしまう
セッションデータ
セッションデータの実体をどこに保存するかはサイトによって異なる
ブラウザのcookie、サーバーのメモリ、サーバーのファイル、KVS、データベース
cookieにセッションデータを保存
Webサーバー側でセッションデータを保持しなくてもよくてサーバー提供者は楽
データはユーザーに閲覧されてしまう
signed cookieを使っていればユーザーによる改竄は防げる
cookieには最大4kbしかデータを持てない
サーバーにセッションデータを保存
Webサーバーのどこにセッションデータを保存するか決める
Djangoのセッション置き場の設定では、ファイル、データベース、メモリ、キャッシュ、などから選べる。
ファイルに保存した場合、そのサーバー1台の中にファイルとして保存される
複数のWebサーバーを立ち上げた場合、サーバーごとに保存されてしまう
ロードバランサーがどのWebサーバーにHTTPリクエストを転送するかによって、sessionが切り替わってしまう
session tokenの複製
ログイン状態のセッションのsession tokenを手に入れられれば、別ブラウザでもログイン状態になれる
ブラウザのデバッガーでsession tokenを手に入れて、別ブラウザで設定してみよう
Pythonでもcookieに複製したsession tokenを入れてサーバーアクセスすれば、ログイン状態になれる
#TBD: code例
セキュリティ
セッションハイジャック
タグ
Webの基礎技術