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。

セッションが不要になったら削除しましょうって、Railsってセッションタイムアウトの処理を自動でやってくれないの?

Flash - Communicating between Actions

連続するリクエスト間でデータをやり取りしたい場合にflashが使える。

flash[:note] = "Error!"
<%= @flash[:note] %>

現在のリクエストの間だけでよい場合はflash.nowを使い、反対にキープしておきたい場合はflash.keepを使う。


まだまだ続くよ。