跳至内容 跳至搜索

Action Dispatch Session CacheStore

使用 ActiveSupport::Cache::Store 来存储 session 的 session 存储。如果您不在 session 中存储关键数据,并且不需要它们长时间存在,那么这个存储将非常有用。

选项

  • cache - 要使用的缓存。如果未指定,则使用 Rails.cache

  • expire_after - session 在自动过期之前存储的时间长度。默认情况下,使用缓存的 :expires_in 选项。

  • check_collisions - 检查新生成的 session ID 是否已被使用。如果由于某种原因,128 位随机性被认为不足以避免冲突,则可以启用此选项以确保新生成的 ID 未被使用。默认情况下,设置为 false 以避免额外的缓存写入操作。

方法
D
F
N
W

类公共方法

new(app, options = {})

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

实例公共方法

delete_session(env, sid, options)

从缓存中删除一个 session。

# File actionpack/lib/action_dispatch/middleware/session/cache_store.rb, line 54
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 35
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 43
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