Expand description
Cookie 模块 — 对齐 PHP think\Cookie
本模块实现 Cookie 管理,对齐 PHP think\Cookie 的核心 API。
§PHP 对齐
§核心 API 映射
| PHP 方法 | Rust 方法 | 说明 |
|---|---|---|
Cookie::set($name, $value, $option) | CookieJar::set | 设置 cookie(暂存到 jar,等 save 时统一发送) |
Cookie::get($name, $default) | CookieJar::get / CookieJar::get_with_default | 从 Request 读取 cookie |
Cookie::has($name) | CookieJar::has | 检查 Request 中是否存在 cookie |
Cookie::delete($name, $options) | CookieJar::delete | 删除 cookie(设置过期时间为过去) |
Cookie::forever($name, $value, $option) | CookieJar::forever | 永久保存(10 年) |
Cookie::save() | CookieJar::apply_to_response | 将所有暂存的 cookie 写入 Response 的 Set-Cookie 头 |
§PHP 行为对齐
- 延迟发送:PHP
set()仅暂存到$this->cookie数组,save()时统一发送Set-Cookie头。Rust 通过CookieJar::set暂存到内部 Vec,CookieJar::apply_to_response时统一写入 Response。 - 配置覆盖:PHP
set()的$option参数会覆盖默认配置。Rust 通过CookieOptions实现相同行为。 - 永久 Cookie:PHP
forever()设置 315360000 秒(10 年)过期。 Rust 使用相同常量。 - 删除 Cookie:PHP
delete()通过设置过期时间为time() - 3600实现。 Rust 使用相同策略(expire 设为 -3600)。
§架构说明
本模块不依赖外部 cookie crate,直接基于 axum::http::HeaderMap 操作
Cookie 和 Set-Cookie 头,保持依赖最小化。
§Cookie 头格式(RFC 6265)
- 请求头:
Cookie: name1=value1; name2=value2 - 响应头:
Set-Cookie: name=value; Expires=...; Path=/; Domain=...; Secure; HttpOnly; SameSite=Lax
Structs§
- Cookie
Entry - 单个 Cookie 条目(暂存在
CookieJar中,等待apply_to_response发送) - Cookie
Jar - Cookie 管理器(对齐 PHP
think\Cookie) - Cookie
Options - Cookie 配置选项(对齐 PHP
think\Cookie::$config)