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日

#286HTTP服务器

Download history 87/week @ 2024-03-11 214/week @ 2024-03-18 40/week @ 2024-03-25 175/week @ 2024-04-01 61/week @ 2024-04-08 25/week @ 2024-04-15 103/week @ 2024-04-22 14/week @ 2024-04-29 19/week @ 2024-05-06 8/week @ 2024-05-13 8/week @ 2024-05-20 30/week @ 2024-05-27 46/week @ 2024-06-03 10/week @ 2024-06-10 17/week @ 2024-06-17 9/week @ 2024-06-24

87 每月下载量
用于 redact-client

MIT 许可证

25KB
507

warp-sessions

License: MIT

此仓库为warp框架提供会话中间件

  • 支持异步
  • 为多个会话后端提供即插即用功能
  • 集成到现有的Warp-style过滤器链

通过查看文档开始使用。

您还可以在示例文件夹中找到更多代码示例。


lib.rs:

warp-sessions

warp-sessions 包提供一组过滤器和一个接口,用于将会话支持添加到您的warp处理器。

它按以下方式运行

  1. 创建一个具有访问某些 SessionStore 的warp过滤器。当收到请求时,此过滤器将提取会话ID cookie,获取匹配的会话,并将其返回给路由处理器使用。它还会处理在没有会话的情况下创建新会话。
  2. 路由处理器按正常方式运行,获取和设置它收到的会话结构中的信息。
  3. 当路由准备回复时,它创建其回复结构并将其放入与接收到的会话结构一起的元组中。然后,它在 .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