跳至内容 跳至搜索

包含在一个 cookie jar 中以允许链接,例如 cookies.permanent.signed

方法
E
P
S

实例公共方法

encrypted()

返回一个 jar,它将在发送到客户端之前自动加密 cookie 值,并在读取时解密。如果 cookie 被用户(或第三方)篡改,则会返回 nil

如果 config.action_dispatch.encrypted_cookie_saltconfig.action_dispatch.encrypted_signed_cookie_salt 都已设置,则使用 HMAC AES-256-CBC 加密的旧版 cookie 将被透明地升级。

此 jar 要求您在应用程序的 secret_key_base 上设置一个合适的秘密,以用于验证。

示例

cookies.encrypted[:discount] = 45
# => Set-Cookie: discount=DIQ7fw==--K3n//8vvnSbGq9dA--7Xh91HfLpwzbj1czhBiwOg==; path=/

cookies.encrypted[:discount] # => 45
# File actionpack/lib/action_dispatch/middleware/cookies.rb, line 274
def encrypted
  @encrypted ||= EncryptedKeyRotatingCookieJar.new(self)
end

permanent()

返回一个 jar,它将自动将分配的 cookie 设置为从现在起 20 年的过期日期。示例

cookies.permanent[:prefers_open_id] = true
# => Set-Cookie: prefers_open_id=true; path=/; expires=Sun, 16-Dec-2029 03:24:16 GMT

此 jar 仅用于写入。您将通过常规访问器读取永久 cookie。

此 jar 也允许与签名 jar 链接,因此您可以设置永久的签名 cookie。示例

cookies.permanent.signed[:remember_me] = current_user.id
# => Set-Cookie: remember_me=BAhU--848956038e692d7046deab32b7131856ab20e14e; path=/; expires=Sun, 16-Dec-2029 03:24:16 GMT
# File actionpack/lib/action_dispatch/middleware/cookies.rb, line 234
def permanent
  @permanent ||= PermanentCookieJar.new(self)
end

signed()

返回一个 jar,它将自动生成 cookie 值的签名表示,并在再次从 cookie 读取时进行验证。这对于创建用户不应更改其值的 cookie 很有用。如果签名的 cookie 被用户(或第三方)篡改,则会返回 nil

此 jar 要求您在应用程序的 secret_key_base 上设置一个合适的秘密,以用于验证。

示例

cookies.signed[:discount] = 45
# => Set-Cookie: discount=BAhpMg==--2c1c6906c90a3bc4fd54a51ffb41dffa4bf6b5f7; path=/

cookies.signed[:discount] # => 45
# File actionpack/lib/action_dispatch/middleware/cookies.rb, line 253
def signed
  @signed ||= SignedKeyRotatingCookieJar.new(self)
end

signed_or_encrypted()

返回 signedencrypted jar,如果设置了 secret_key_base,则优先使用 encrypted。由 ActionDispatch::Session::CookieStore 使用,以避免引入新的 cookie 存储。

# File actionpack/lib/action_dispatch/middleware/cookies.rb, line 281
def signed_or_encrypted
  @signed_or_encrypted ||=
    if request.secret_key_base.present?
      encrypted
    else
      signed
    end
end