#cookies #http #web

cookie-rs

library for working with HTTP cookies

8 releases (4 breaking)

0.4.1 Mar 3, 2025
0.4.0 Feb 12, 2025
0.3.0 Feb 7, 2025
0.2.1 Jan 12, 2025
0.0.1-alpha Aug 5, 2024

#34 in #cookies

Download history 274/week @ 2025-10-13 392/week @ 2025-10-20 354/week @ 2025-10-27 228/week @ 2025-11-03 394/week @ 2025-11-10 449/week @ 2025-11-17 464/week @ 2025-11-24 336/week @ 2025-12-01 190/week @ 2025-12-08 249/week @ 2025-12-15 122/week @ 2025-12-22 222/week @ 2025-12-29 353/week @ 2026-01-05 398/week @ 2026-01-12 462/week @ 2026-01-19 532/week @ 2026-01-26

1,796 downloads per month
Used in 2 crates (via axum-cookie)

MIT license

170KB
625 lines

cercis-preview

Cookie Library

cookie-rs is a flexible library for working with HTTP cookies. It allows you to create, parse, and manage cookies.

Features

  • Create cookies with various attributes (e.g., Domain, Path, Secure, HttpOnly).
  • Parse cookies from HTTP headers.
  • Manage cookies using CookieJar, which tracks additions and removals.
  • Support for SameSite attribute.
  • Errors are handled gracefully through ParseError.

Quick Start

To use this library, add it to your dependencies:

[dependencies]
...
+ cookie-rs = "0.4.1"
use cookie_rs::prelude::*;

let cookie = Cookie::builder("session", "abc123")
    .domain("example.com")
    .path("/")
    .secure(true)
    .http_only(true)
    .same_site(SameSite::Lax)
    .build();

println!("{}", cookie.to_string());

Output:

session=abc123; Domain=example.com; Path=/; Secure; HttpOnly; SameSite=Lax
use cookie_rs::Cookie;
let cookie_str = "session=abc123; Secure; HttpOnly";
let cookie = Cookie::parse(cookie_str).expect("Failed to parse cookie");
assert_eq!(cookie.name(), "session");
assert_eq!(cookie.value(), "abc123");
assert_eq!(cookie.secure(), Some(true));
assert_eq!(cookie.http_only(), Some(true));

Manage Cookies with CookieJar

use cookie_rs::{Cookie, CookieJar};
let mut jar = CookieJar::default();
// Add a cookie
let cookie = Cookie::new("user", "john");
jar.add(cookie);
// Retrieve a cookie
if let Some(cookie) = jar.get("user") {
    println!("Found cookie: {}={}.", cookie.name(), cookie.value());
}
// Remove a cookie
jar.remove("user");
assert!(jar.get("user").is_none());

Parse Multiple Cookies from a Header

use cookie_rs::CookieJar;
let cookie_header = "name1=value1; name2=value2";
let jar = CookieJar::parse(cookie_header).expect("Failed to parse cookies");
assert!(jar.get("name1").is_some());
assert!(jar.get("name2").is_some());

Convert Cookies to HTTP Header Values

use cookie_rs::{Cookie, CookieJar};
let mut jar = CookieJar::default();
jar.add(Cookie::new("name1", "value1"));
jar.add(Cookie::new("name2", "value2"));
let headers = jar.as_header_values();
for header in headers {
    println!("Set-Cookie: {}", header);
}

Output:

Set-Cookie: name1=value1
Set-Cookie: name2=value2

No runtime deps