-
Notifications
You must be signed in to change notification settings - Fork 9
Cookies
可以被通过请求 Context 实例访问 Cookies。 ctx.Request()
方法返回一个 net/http#Request
。
但是,Iris 的 Context
提供了一些帮助程序, 使你可以更轻松的访问 cookies 的最常见用例。并且无需使用你的自定义代码(如果你仅使用 Request 的 Cookies方法)。
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 , RemoveCookie
和 SetCookieKV
。
让我们进一步介绍一下 Cookie 编码。
编码
添加 cookie 时提供编码功能。
接受一个 CookieEncoder
并将 cookie 的值设置为编码后的值。
使用的是 SetCookie
和 SetCookieKV
。
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 ,感觉作者是在开玩笑哈),要么从键入的内容中得出密钥。
GetCookie
通过它的名称返回 cookie 的值,如果没有找到什么,则会返回空字符串。
GetCookie(name string, options ...CookieOption) string
如果你想要更多的值,请改用一下方式:
cookie, err := ctx.Request().Cookie("name")
ctx.Request().Cookies()
所有可用请求 cookie 的切片。有时你想要去更新它们或者对它们中的每一个执行操作,最简单的方法是通过 VisitAllCookies
方法。
VisitAllCookies(visitor func(name string, value string))
RemoveCookie
方法通过名称和等于 "/" 的路径来删除一个 cookie ,(根目录)。
提示:通过提供 iris.CookieCleanPath
Cookie 的选项,将cookie的路径更改为当前路径,如: RemoveCookie("nname", iris.CookieCleanPath)
。
另外,请注意, 默认行为是将其 HttpOnly
设置为 true 。它根据网络标准执行 cookie 的删除。
RemoveCookie(name string, options ...CookieOption)
继续学习 HTTP Sessions.