session 0.1.2

iron session implementation based on redis
Documentation

session Build Status

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::*;

// To run, $ cargo run --example simple
// to use, $ curl "http://localhost:3000"

#[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.