add a readme
This commit is contained in:
parent
2aaa877cb5
commit
d195aace48
33
README.md
Normal file
33
README.md
Normal file
@ -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…
x
Reference in New Issue
Block a user