Redis Sessions
There is a need to maintain a universal session across different application server platforms.
This is a NodeJS module to keep sessions in a Redis datastore and add some useful methods.
Installation
npm install redis-sessions
Basics
- Every session belongs to an app (e.g.
webapp
, app_cust123
). - A session is created by supplying the app and an id (usually the unique id of the user). A token will be returned.
- A session is queried with the app and token.
- Additional data (key/value) can be stored in the session.
- A session can be killed with the app and token.
- All sessions of an app can be killed.
Additional methods
- TODO: Get an array of all sessions of an app, complete with
lastactivity
, ip
which were active within the last n seconds. - Get the amount of active sessions of an app within the last n seconds.
- TODO: Get all sessions of a single id.
- TODO: Kill all sessions that belong to a single id. E.g. log out user123 on all devices.
Usage in NodeJS
Setup and creating the first session
RedisSessions = require("../redis-sessions");
rs = new RedisSessions();
app = "myapp";
rs.create({
app: app,
id: "user1001"},
function(err, resp) {
});
Add some data to the session
rs.set({
app: app,
token: "r30kKwv3sA6ExrJ9OmLSm4Wo3nt9MQA1yG94wn6ByFbNrVWhcwAyOM7Zhfxqh8fe",
d: {
"unread_msgs": 12,
"last_action": "/read/news",
"birthday": "2013-08-13"
}},
function(err, resp) {
});
Get a session for a token
rs.get({
app: app,
token: "r30kKwv3sA6ExrJ9OmLSm4Wo3nt9MQA1yG94wn6ByFbNrVWhcwAyOM7Zhfxqh8fe"},
function(err, resp) {
});
Set/Update/Delete
Set/Update/Delete parameters by supplying app, token and some data d
.
The d
object contains a simple key/value list where values
can be string, number, boolean or null.
To remove keys set them to null
, keys that are not supplied will not be touched.
rs.set({
app: app,
token: "r30kKwv3sA6ExrJ9OmLSm4Wo3nt9MQA1yG94wn6ByFbNrVWhcwAyOM7Zhfxqh8fe",
d: {
"unread_msgs": null
"last_action": "/read/msg/2121"
}},
function(err, resp) {
});
Kill
Kill a single session by supplying app and token:
rs.kill({
app: app,
token: "r30kKwv3sA6ExrJ9OmLSm4Wo3nt9MQA1yG94wn6ByFbNrVWhcwAyOM7Zhfxqh8fe"},
function(err, resp) {
});
Note: If {kill: 0} is returned the session was not found.
Activity
Query the amount of active session within the last 10 minutes (600 seconds).
rs.activity({
app: app,
dt: 600},
function(err, resp) {
});
Killall
Kill all sessions of an app:
rs.killall({app: app},
function(err, resp) {
});