Open4
【調査メモ】Redisを用いたセッション管理

そもそもRedisとは?
- メモリ上のKey-Valueストア
- メモリ上にデータを格納するので高速に動作
- 再起動するとデータは失われる

セッション管理としてのRedis
- セッション:クライアントとサーバーの通信状態をWebサーバー上に保存する
- クライアントは、セッションIDをURLやCookieでサーバーに渡す
- サーバーは、Key-Value構造としてメモリやファイル、DBに保存する
- デフォルトは、セッションはWebサーバのメモリ上に保存される
- Webサーバ単独でセッション管理を行うとロードバランサを構成できなくなる
- DBに保存するとIO分のパフォーマンスに影響が出る

Redisがなぜセッション管理に向いているか?
- 高速であるため
- セッションは頻繁に読み書きが発生する
- 単純なデータ構造に向いているため
- セッションは、セッションIDとセッション情報をペアとして保存することが多い
- データにTTL(有効期限)を設定できるため
- セッション期限切れと同期してセッションデータを削除できる
- クラスタリングをサポートしているため
- 大規模アプリケーションにおけるセッション管理においても拡張性が高い
- 文字列、ハッシュ、Set、Listなどさまざまなデータ構造をサポートしている

- クライアント側はCookieとしてセッションIDを保持しておく
- Redis側にはセッションIDをkeyとしてユーザー情報などのvalueを保持する
- クライアント側
- Cookieとして sessionId: { sessionId}
- Redis
- {sessionId}: {userInfo}
セッションハイジャックなどへの対策
- HTTPS化
- Cookieの設定値(Secure属性とHTTP-Only属性)を考慮する
- Secure: true → HTTPS通信時のみCookieを送信
- HTTP-Only: true → ブラウザ側のJSでdocument.cookieで値を取得することができなくなる(デベロッパーツールでは閲覧可能)
- セッション期限を短く設定する
- セッションIDのランダムで予測困難な値にする