Skip to content

Cookies

snowly edited this page Feb 19, 2020 · 3 revisions

可以被通过请求 Context 实例访问 Cookies。 ctx.Request() 方法返回一个 net/http#Request

但是,Iris 的 Context 提供了一些帮助程序, 使你可以更轻松的访问 cookies 的最常见用例。并且无需使用你的自定义代码(如果你仅使用 Request 的 Cookies方法)。

设置 Cookie

SetCookie 方法添加一个 cookie。

不需要使用 "选项", 可以使用它们来修改 "cookie"。 稍后你将看到可用的选项,可以根据你的 Web 应用程序要求添加自定义选项,这也有助于避免在代码库中重复你的内容。

SetCookie(cookie *http.Cookie, options ...CookieOption)

如果需要,还可以使用 SetCookieKV 方法,该方法不需要导入 net/http 包。

SetCookieKV(name, value string, options ...CookieOption)

请注意,SetCookieKV 设置的 cookie 的默认到期时间是 365 天。 你可以使用 CookieExpires Cookie 的选项(请参见下文) ,也可以通过设置 kataras/iris/Context.SetCookieKVExpiration 包级变量来全局使用。

CookieOption 只是 func(*http.Cookie) 的类型。

设置路径

CookiePath(path string) CookieOption

设置过期

iris.CookieExpires(durFromNow time.Duration) CookieOption

HttpOnly

iris.CookieHTTPOnly(httpOnly bool) CookieOption

HttpOnly 字段默认为 true , RemoveCookieSetCookieKV

让我们进一步介绍一下 Cookie 编码。

编码

添加 cookie 时提供编码功能。

接受一个 CookieEncoder 并将 cookie 的值设置为编码后的值。

使用的是 SetCookieSetCookieKV

iris.CookieEncode(encode CookieEncoder) CookieOption

解码

检索 cookie 时提供解码功能。

GetCookie 返回之前,接受 CookieDecoder 并将 cookie 的值设置为解码值。

使用的是 GetCookie

iris.CookieDecode(decode CookieDecoder) CookieOption

CookieEncoder 可以描述为:

CookieEncoder 应该对 cookie 值进行编码。

应该接受 Cookie 的名称作为其第一个参数,并且 cookie值 ptr 作为第二个参数。 如果编码操作失败,应返回一个编码值或一个空值。 如果编码操作失败,应该返回一个错误。

CookieEncoder func(cookieName string, value interface{}) (string, error)

和 CookieDecoder:

CookieDecoder 应该解码 cookie 值。

  • 应该接受 Cookie 的名称作为其第一个参数,
  • 编码的 cookie 值作为第二个参数,解码的值 ptr 作为第三个参数。
  • 应该返回一个解码值,如果解码操作失败,则返回一个空值。
  • 如果解码操作失败,应返回一个错误。
CookieDecoder func(cookieName string, cookieValue string, v interface{}) error

错误不会被打印出来, 因此你必须知道自己在做什么,并且要记住: 如果使用 AES,它仅支持 16、24 或 32 字节的密钥大小。

你要么需要提供准确的金额(原文:You either need to provide exactly that amount ,感觉作者是在开玩笑哈),要么从键入的内容中得出密钥。

获取 Cookie

GetCookie 通过它的名称返回 cookie 的值,如果没有找到什么,则会返回空字符串。

GetCookie(name string, options ...CookieOption) string

如果你想要更多的值,请改用一下方式:

cookie, err := ctx.Request().Cookie("name")

获取所有 Cookies

ctx.Request().Cookies() 所有可用请求 cookie 的切片。有时你想要去更新它们或者对它们中的每一个执行操作,最简单的方法是通过 VisitAllCookies 方法。

VisitAllCookies(visitor func(name string, value string))

删除 Cookie

RemoveCookie 方法通过名称和等于 "/" 的路径来删除一个 cookie ,(根目录)。

提示:通过提供 iris.CookieCleanPath Cookie 的选项,将cookie的路径更改为当前路径,如: RemoveCookie("nname", iris.CookieCleanPath)

另外,请注意, 默认行为是将其 HttpOnly 设置为 true 。它根据网络标准执行 cookie 的删除。

RemoveCookie(name string, options ...CookieOption)

继续学习 HTTP Sessions.

Clone this wiki locally