可以被通过请求 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).