Cookie 操作
2025年7月17日大约 1 分钟hyperlanewebrustusage-introductioncookie
提示
hyperlane
框架提供了完整的 Cookie 处理功能,支持请求和响应中的 Cookie 操作。
请求 Cookie 操作
获取所有请求 Cookie
let cookies: Cookies = ctx.get_request_cookies().await;
获取特定请求 Cookie
let cookie_value: OptionCookiesValue = ctx.get_request_cookie("session_id").await;
提示
Cookie 名称通常是自定义的,所以使用字符串字面量。但对于标准的请求头操作,建议使用框架常量。
响应 Cookie 操作
获取所有响应 Cookie
let cookies: Cookies = ctx.get_response_cookies().await;
获取特定响应 Cookie
let cookie_value: OptionCookiesValue = ctx.get_response_cookie("user_token").await;
设置响应 Cookie
使用字符串直接设置
ctx.set_response_header(SET_COOKIE, "session_id=abc123; Path=/; HttpOnly").await;
使用 CookieBuilder 构建
let cookie_value: String = CookieBuilder::new("session_id", "abc123")
.path("/")
.http_only()
.build();
ctx.set_response_header(SET_COOKIE, cookie_value).await;
设置多个 Cookie
let session_cookie: String = CookieBuilder::new("session_id", "abc123")
.path("/")
.http_only()
.secure()
.max_age(3600)
.build();
let pref_cookie: String = CookieBuilder::new("user_pref", "dark_mode")
.path("/")
.max_age(86400)
.build();
ctx.set_response_header(SET_COOKIE, session_cookie).await
.set_response_header(SET_COOKIE, pref_cookie).await;
CookieBuilder 方法
基本构建
let cookie: String = CookieBuilder::new("name", "value").build();
设置属性
let cookie: String = CookieBuilder::new("session", "token123")
.expires("Wed, 21 Oct 2025 07:28:00 GMT")
.max_age(3600)
.domain("example.com")
.path("/")
.secure()
.http_only()
.same_site("Strict")
.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")
.http_only()
.secure()
.max_age(3600)
.build();
ctx.set_response_header(SET_COOKIE, session_cookie).await;
// 获取会话 Cookie
if let Some(session) = ctx.get_request_cookie("session").await {
// 处理会话
}
清除 Cookie
let clear_cookie: String = CookieBuilder::new("session", "")
.max_age(0)
.build();
ctx.set_response_header(SET_COOKIE, clear_cookie).await;