企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持知识库和私有化部署方案 广告
可以被通过请求 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 , `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 ,感觉作者是在开玩笑哈),要么从键入的内容中得出密钥。 ## 获取 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](https://github.com/kataras/iris/wiki/Sessions).