Cookie 操作
2026/2/15大约 2 分钟hyperlanewebrustusage-introductioncookie
提示
hyperlane 框架提供了完整的 Cookie 处理功能,支持请求和响应中的 Cookie 操作。
请求 Cookie 操作
获取请求所有 Cookie
// 尝试获取请求所有 Cookie
let cookies: Option<Cookies> = ctx.get_request().try_get_cookies();
// 获取请求所有 Cookie(获取不到则panic)
let cookies: Option<Cookies> = ctx.get_request().get_cookies();获取请求特定 Cookie
// 尝试获取请求特定 Cookie
let cookie_value: Option<CookieValue> = ctx.get_request().try_get_cookie("session_id");
// 获取请求特定 Cookie(获取不到则panic)
let cookie_value: CookieValue = ctx.get_request().get_cookie("session_id");提示
Cookie 名称通常是自定义的,所以使用字符串字面量。但对于标准的请求头操作,建议使用框架常量。
响应 Cookie 操作
获取响应所有 Cookie
// 尝试获取响应所有 Cookie
let cookies: Option<Cookies> = ctx.get_response().try_get_cookies();
// 获取响应所有 Cookie(获取不到则panic)
let cookies: Option<Cookies> = ctx.get_response().get_cookies();获取响应特定 Cookie
// 尝试获取响应特定 Cookie
let cookie_value: Option<CookieValue> = ctx.get_request().try_get_cookie("session_id");
// 获取响应特定 Cookie(获取不到则panic)
let cookie_value: CookieValue = ctx.get_request().get_cookie("session_id");设置响应 Cookie
使用字符串直接设置
ctx.get_mut_response().set_header(SET_COOKIE, "session_id=abc123; Path=/; HttpOnly");使用 CookieBuilder 构建
let cookie_value: String = CookieBuilder::new("session_id", "abc123")
.set_path("/")
.http_only()
.build();
ctx.get_mut_response().set_header(SET_COOKIE, cookie_value);设置多个 Cookie
let session_cookie: String = CookieBuilder::new("session_id", "abc123")
.set_max_age(3600)
.set_path("/")
.http_only()
.secure()
.build();
let pref_cookie: String = CookieBuilder::new("user_pref", "dark_mode")
.set_max_age(86400)
.set_path("/")
.build();
ctx.get_mut_response().add_header(SET_COOKIE, session_cookie).add_header(SET_COOKIE, pref_cookie);CookieBuilder 方法
基本构建
let cookie: String = CookieBuilder::new("name", "value").build();设置属性
let cookie: String = CookieBuilder::new("session", "token123")
.set_expires("Wed, 21 Oct 2025 07:28:00 GMT")
.set_domain("example.com")
.set_same_site("Strict")
.set_max_age(3600)
.set_path("/")
.secure()
.http_only()
.build();解析现有 Cookie
let cookie_builder: CookieBuilder = CookieBuilder::parse("name=value; Path=/; HttpOnly");
let rebuilt_cookie: String = cookie_builder.build();基本使用示例
会话管理
// 响应设置Cookie
let session_cookie: String = CookieBuilder::new("session", "token123")
.set_max_age(3600)
.http_only()
.secure()
.build();
ctx.get_mut_response().set_header(SET_COOKIE, session_cookie);
// 请求读取Cookie
if let Some(session) = ctx.get_request().try_get_cookie("session") {}清除 Cookie
let clear_cookie: String = CookieBuilder::new("session", "")
.set_max_age(0)
.build();
ctx.get_mut_response().set_header(SET_COOKIE, clear_cookie);