AWDwR "Chapter16 Action Controller and Rails" つづき
Action Controller つづきっ!
Cookies and Sessions
クッキーはcookiesというハッシュで読み書きできる。
cookies[:the_time] = Time.now.to_s cookie_value = cookies[:the_time]
クッキーを書き込む際に指定できるオプションは以下のとおり。
- :domain クッキーを送信するドメイン
- :path クッキーを送信するパス
- :expires エクスパイアする時刻。指定しない場合は永久に保存。
- :secure https://のときのみクッキーを送信
セッションもsessionというハッシュで読み書きできる。
session[:user_id] = user.id user_id = session[:user_id]
セッションのオプションの設定の仕方はちょっと変わっていてconfig/environment.rbかconfig/environments以下のファイルに以下のような感じで設定。
ActionController::CgiRequest::DEFAULT_SESSION_OPTIONS[:session_key] = 'my_app'
指定できるオプションは以下のとおり。
- :database_manager セッションデータを保存する方法
- :session_domain セッションIDを設定するクッキーのドメイン
- :session_id セッションID
- :session_key セッションIDを設定するクッキーの名前
- :session_path セッションIDを設定するクッキーのパス
- :session_secure http://のときのみセッションを有効にする場合はtrue
- :new_session ?
- :session_expires セッションIDを設定するクッキーのエクスパイア時刻
database_managerには以下が指定できる。
- :database_manager=>CGI::Session::PStore PStoreフォーマットでフラットファイルに保存される。デフォルト。
- :database_manager=>CGI::Session::ActiveRecordStore DBのsessionsというテーブルに保存する。
- :database_manager=>CGI::Session::DrbStore DRbサーバに保存する。
- :database_manager=>CGI::Session::MemCacheStore 分散オブジェクトキャッシングシステムに保存する。
- :database_manager=>CGI::Session::MemoryState メモリに保存する。
- :database_manager=>CGI::Session::FileStrore フラットファイルに保存する。
で、どれを選ぶかというとMemCacheStore,MemoryStore,FileStoreはありえない。シングルサーバならPStore。同時10,000セッション以上、または複数サーバならActiveRecord。さらにアクセス数が増えた場合はDRb。