17个稳定版本
1.0.19 | 2023年3月31日 |
---|---|
1.0.18 | 2023年1月25日 |
1.0.17 | 2022年7月20日 |
1.0.16 | 2021年11月30日 |
1.0.12 | 2021年1月27日 |
#286 在 HTTP服务器
87 每月下载量
用于 redact-client
25KB
507 行
warp-sessions
此仓库为warp框架提供会话中间件
- 支持异步
- 为多个会话后端提供即插即用功能
- 集成到现有的Warp-style过滤器链
通过查看文档开始使用。
您还可以在示例文件夹中找到更多代码示例。
lib.rs
:
warp-sessions
warp-sessions
包提供一组过滤器和一个接口,用于将会话支持添加到您的warp处理器。
它按以下方式运行
- 创建一个具有访问某些
SessionStore
的warp过滤器。当收到请求时,此过滤器将提取会话ID cookie,获取匹配的会话,并将其返回给路由处理器使用。它还会处理在没有会话的情况下创建新会话。 - 路由处理器按正常方式运行,获取和设置它收到的会话结构中的信息。
- 当路由准备回复时,它创建其回复结构并将其放入与接收到的会话结构一起的元组中。然后,它在
.and_then(...)
调用中调用会话回复处理器,使用.untuple_one()
解对输出。
示例
use warp::{Filter, Rejection};
use warp_sessions::{MemoryStore, SessionWithStore, CookieOptions, SameSiteCookieOption};
#[tokio::main]
async fn main() {
let session_store = MemoryStore::new();
let route = warp::get()
.and(warp::path!("test"))
.and(warp_sessions::request::with_session(
session_store,
Some(CookieOptions {
cookie_name: "sid",
cookie_value: None,
max_age: Some(60),
domain: None,
path: None,
secure: false,
http_only: true,
same_site: Some(SameSiteCookieOption::Strict),
}),
))
.and_then(
move |session_with_store: SessionWithStore<MemoryStore>| async move {
Ok::<_, Rejection>((
warp::reply::html("<html></html>".to_string()),
session_with_store,
))
},
)
.untuple_one()
.and_then(warp_sessions::reply::with_session);
// Start the server
let port = 8080;
println!("starting server listening on ::{}", port);
// warp::serve(route).run(([0, 0, 0, 0], port)).await;
}
作为 Some(CookieOptions)
提供给 warp_sessions::request::with_session
的第二个参数可以可选地是 None
。这会导致返回 CookieOptions::default() 的值。此选项编码了可以应用于会话ID cookie的完整可能的cookie参数集。请查看 CookieOptions 了解字段信息。
通过将附加到头部映射而不是插入来解决#609问题,允许设置多个会话cookie。
这个会话中间件设计得非常轻量级,除了会话存储外没有共享状态。它可以在相同的路由中多次重用,并使用不同的会话存储。
后端会话逻辑由async-session crate提供。只需简单地实现SessionStore
特质,并将其传递给提供的with_session(...)
过滤器以使用它。
依赖项
~12–23MB
~334K SLoC