跳到內容 跳到搜尋

Action Dispatch Session CacheStore

一個用 ActiveSupport::Cache::Store 來儲存 session 的 session store。這個 store 最有用處的情況是你不會在你的 session 儲存重要的資料,且你不需要它們存續一段長時間。

選項

  • cache - 要使用的快取。如果沒有指定,將使用 Rails.cache

  • expire_after - session 會儲存多久的時間後會自動過期。預設會使用該快取的 :expires_in 選項。

方法
D
F
N
W

類別公用方法

new(app, options = {})

# File actionpack/lib/action_dispatch/middleware/session/cache_store.rb, line 23
def initialize(app, options = {})
  @cache = options[:cache] || Rails.cache
  options[:expire_after] ||= @cache.options[:expires_in]
  super
end

實例公用方法

delete_session(env, sid, options)

從快取中移除一個 session。

# File actionpack/lib/action_dispatch/middleware/session/cache_store.rb, line 49
def delete_session(env, sid, options)
  @cache.delete(cache_key(sid.private_id))
  @cache.delete(cache_key(sid.public_id))
  generate_sid
end

find_session(env, sid)

從快取中取得一個 session。

# File actionpack/lib/action_dispatch/middleware/session/cache_store.rb, line 30
def find_session(env, sid)
  unless sid && (session = get_session_with_fallback(sid))
    sid, session = generate_sid, {}
  end
  [sid, session]
end

write_session(env, sid, session, options)

在快取中設定一個 session。

# File actionpack/lib/action_dispatch/middleware/session/cache_store.rb, line 38
def write_session(env, sid, session, options)
  key = cache_key(sid.private_id)
  if session
    @cache.write(key, session, expires_in: options[:expire_after])
  else
    @cache.delete(key)
  end
  sid
end