session
Request session extension for the Iron web framework.
session is a fast, convenient, and flexible extension for Iron Request. It
allows saving/retriving data in to session, redis as the backend data repos.
Example
extern crate iron;
extern crate session;
extern crate rustc_serialize;
use iron::prelude::*;
use session::*;
#[derive(Debug,RustcEncodable, RustcDecodable)]
struct Account {
id: usize,
name: Option<String>,
email: Option<String>,
}
fn main() {
let mut chain = Chain::new(request_handler);
let signing_key = "key-123456";
let expire_seconds = 3600;
let connect_str = "redis://localhost";
chain.around(session::Session::new(signing_key, expire_seconds, connect_str));
Iron::new(chain).http("localhost:3000").unwrap();
}
fn request_handler(req: &mut Request) -> IronResult<Response> {
let account = Account {
id: 12,
name: Some("alex".to_owned()),
email: None,
};
req.set_session("account", account).unwrap();
let account_session = req.get_session::<Account>("account");
req.set_session("address", "where are you?".to_owned()).unwrap();
let address = req.get_session::<String>("address").unwrap();
req.clear_session().unwrap();
let account_after_clear = req.get_session::<Account>("account");
let content = format!("account_session:{:?}\naddress:{}\naccount_after_clear:{:?}",
account_session,
address,
account_after_clear);
Ok(Response::with((iron::status::Ok, content)))
}
Installation
If you're using cargo, just add router to your Cargo.toml
.
[dependencies]
session = "*"
Otherwise, cargo build
, and the rlib will be in your target
directory.