Cookies可以通过Context的请求实例访问, ctx.Request()
返回一个 net/http#Request
然而, Iris的 Context
提供了一些帮助, 方便访问最常见的Cookie, 而如果您只是使用请求的cookie方法, 则不需要任何自定义的额外代码
SetCookie
和 UpsertCookie
方法添加或设置(如果允许还可删除)一条cookie
"options" 的最后一个参数是可选的, CookieOption
可用来修改 "cookie" , 稍后您需要看到可用的选项, 可以根据您的web应用需求添加自定义选项, 这有助于避免您在代码库中的重复
在我们继续之前, Context
也有一个 SetSameSite(http.SameSite)
方法, 它为所有即将发送的cookie设置 "SameSite" cookie字段
SetCookie(cookie *http.Cookie, options ...CookieOption)
如果您愿意, 您也可以使用 SetCookieKV
方法, 它不需要导入 net/http
包
SetCookieKV(name, value string, options ...CookieOption)
请注意, SetCookieKV
设置的默认过期时间是365天, 您也可以使用 CookieExpires
这个Cookie选项(见下文)或者全局设置 kataras/iris/Context.SetCookieKVExpiration
包层的变量
CookieOption
只为 func(*http.Cookie)
而服务
CookiePath(path string) CookieOption
iris.CookieExpires(durFromNow time.Duration) CookieOption
iris.CookieHTTPOnly(httpOnly bool) CookieOption
对于 RemoveCookie
和 SetCookieKV
, HttpOnly 字段默认为true
我们再来讨论一下cookie的编码问题
在添加cookie时提供编码的功能
接收一个 CoolieEncoder
并且设置cookie的值设置为编码后的值
它的使用者是 SetCookie
和 SetCookieKV
iris.CookieEncode(encode CookieEncoder) CookieOption
在检索cookie时提供解码功能
接收一个 CookieDecoder
并且在返回给 GetCookie
前设置cookie的值为解码后的值
它的使用者是 GetCookie
iris.CookieDecode(decode CookieDecoder) CookieOption
其中, CookieEncoder
可以这样描述:
CookieEncoder应编码cookie的值
- 应接收cookie的名称作为它的第一个参数
- cookie的值的指针作为第二个参数
- 如果编码失败, 应返回一个已编码的值或一个空值
- 如果编码失败, 应返回一个错误
CookieEncoder func(cookieName string, value interface{}) (string, error)
CookieDecoder
这样描述:
CookieDecoder应解码cookie的值
- 应接收cookie的名称作为它的第一个参数
- cookie解码后的值作为第二个参数, 解码后值的指针作为第三个参数
- 如果解码失败, 应返回一个已解码的值或一个空值
- 如果解码失败, 应返回一个错误
CookieDecoder func(cookieName string, cookieValue string, v interface{}) error
错误不会被打印, 所以您必须心里有数, 记住: 如果您使用AES, 它只支持16、24或32字节的秘钥
您要么提供准确的数量, 要么从输入的内容中派生键
GetCookie
方法按cookie的名称返回它的值, 未找到则返回空的字符串
GetCookie(name string, options ...CookieOption) string
如果您想要更多的值那就用这个代替:
cookie, err := ctx.Request().Cookie("name")
ctx.Request().Cookies()
方法返回所有可用请求cookie的切片, 有时候您想要修改它们或者对它们中的每一个执行一个操作
VisitAllCookies(visitor func(name string, value string))
RemoveCookie
方法可以根据cookie的名字和形如 "/xxx" 的地址, 根路径来删除它
小贴士: 通过提供 iris.CookieCleanPath
Cookie选项可以更改cookie的路径为当前路径, 比如 RemoveCookie("nname", iris.CookieCleanPath)
而且注意, cookie的 HttpOnly
参数的默认选项是true, 它根据web标准执行删除cookie
RemoveCookie(name string, options ...CookieOption)
戳我学习HTTP Session