为了添加cookie支持到你的Ring处理器,你需要在你的wrap-cookies中间件中包装它:

    1. (use 'ring.middleware.cookies)
    2. (def app
    3. (wrap-cookies your-handler))

    这会添加:cookies key到请求map中,这个请求map将会包含一个像这样的cookies map:

    1. {"session_id" {:value "session-id-hash"}}

    想要设置一个cookie,你需要添加一个:cookies key到你的响应map:

    1. {:status 200
    2. :headers {}
    3. :cookies {"session_id" {:value "session-id-hash"}}
    4. :body "Setting a cookie."}

    不但可以设置cookie的值,你也可以设置额外的属性:

    • :domain - 限制cookie到一个特殊的域
    • :path - 限制cookie到一个特殊的路径
    • :secure - 限制cookie到HTTPS URLS,如果为true的话
    • :http-only - 限制cookie到HTTP,如果为true的话(不可通过 例如:javascript 访问)
    • :max-age - 设置cookie到期的秒数
    • :expires - 设置一个特殊的cookie到期日期和时间
    • :same-site - 设置为:strict或者:lax以确定在处理跨站点(cross-site)请求时是否发送cookie
      所以,如果你想要一个安全的cookie,在一小时内到期,你可以使用:
    1. {"secret" {:value "foobar", :secure true, :max-age 3600}}