add a readme

jsons
Ondřej Hruška 5 years ago
parent 2aaa877cb5
commit d195aace48
Signed by: MightyPork
GPG Key ID: 2C5FD5035250423D
  1. 33
      README.md
  2. 5
      src/session.rs

@ -0,0 +1,33 @@
# Sessions for Rocket.rs
Adding cookie-based sessions to a rocket application is extremely simple:
```rust
#![feature(proc_macro_hygiene, decl_macro)]
#[macro_use] extern crate rocket;
use rocket_session::Session;
use std::time::Duration;
fn main() {
rocket::ignite()
.attach(Session::fairing(Duration::from_secs(3600)))
.mount("/", routes![index])
.launch();
}
#[get("/")]
fn index(session: Session) -> String {
let mut count: usize = session.get_or_default("count");
count += 1;
session.set("count", count);
format!("{} visits", count)
}
```
Anything serializable can be stored in the session, just make sure to unpack it to the right type.
The session driver internally uses `serde_json::Value` and the `json_dotpath` crate.
Therefore, it's possible to use dotted paths and store the session data in a more structured way.

@ -40,12 +40,9 @@ impl<'a, 'r> FromRequest<'a, 'r> for &'a SessionID {
fn from_request(request: &'a Request<'r>) -> Outcome<Self, (Status, Self::Error), ()> { fn from_request(request: &'a Request<'r>) -> Outcome<Self, (Status, Self::Error), ()> {
Outcome::Success(request.local_cache(|| { Outcome::Success(request.local_cache(|| {
println!("get id");
if let Some(cookie) = request.cookies().get(SESSION_ID) { if let Some(cookie) = request.cookies().get(SESSION_ID) {
println!("from cookie");
SessionID(cookie.value().to_string()) // FIXME avoid cloning (cow?) SessionID(cookie.value().to_string()) // FIXME avoid cloning (cow?)
} else { } else {
println!("new id");
SessionID( SessionID(
rand::thread_rng() rand::thread_rng()
.sample_iter(&rand::distributions::Alphanumeric) .sample_iter(&rand::distributions::Alphanumeric)
@ -158,7 +155,7 @@ struct SessionFairing {
impl Fairing for SessionFairing { impl Fairing for SessionFairing {
fn info(&self) -> Info { fn info(&self) -> Info {
Info { Info {
name: "Session Fairing", name: "Session",
kind: fairing::Kind::Attach | fairing::Kind::Response, kind: fairing::Kind::Attach | fairing::Kind::Response,
} }
} }

Loading…
Cancel
Save