NAME
Dancer::Plugin::WindowSession - Manage Per-Browser-Window sessions.
VERSION
version 0.02
SYNOPSIS
use Dancer;
use Dancer::Plugin::WindowSession;
get '/' => sub {
## Read Session-wide variable
## (applies to all open browser windows)
my $username = session 'username';
## Read Window-Session variable
## (will be different for every open browser window)
my $color = window_session 'color';
## [ return something to the user ]
};
## Assume the user submitted a POST <form>
## with new data, save some variables to the standard session,
## and others to the per-window session.
post 'change_settings' => sub {
my $username = param 'username';
my $color = param 'color';
session 'username' => $username ;
window_session 'color' => $color ;
## [ return something to the user ]
};
dance;
######################
### VERY IMPORTANT ###
######################
In all the template files, you must pass-on the 'winsid' CGI variable,
either as part of a URL or as part of a POST <form> varaible.
Using Template::Toolkit templtates:
<a href="some_other_page?winsid=[% winsid | uri %]">Go to some other page</a>
OR
<form method="post">
<input type="hidden" name="winsid" value="[% winsid|uri %]">
</form>
FUNCTIONS
`window_session' - Read/Write access to the per-window-session
variables. Behaves exactly like Dancer's `session' keyword.
`window_session_id' - Returns the per-window-session ID number (if you
need to embed it in a URL string).
DESCRIPTION
This module makes it easy to manage per-window session variables (as
opposed to browser-wide session variables).
The common use case is when you expect users of your website to have
multiple web-browser windows open with your web-site, and for each open
window you want to maintain independant set of variables.
IMPLEMENTATION
To use this plugin effectively, be sure to include the `winsid' value in
all URLs and POST forms you have in your templates.
This plugin uses the same session engine configured for your Dancer
application (see Dancer::Session).
CONFIGURATION
No configuration options are available, at the moment.
Future version might allow changing the name of the CGI varaible
(`winsid') to something else.
AUTHOR
Assaf Gordon, `<gordon at cshl.edu>'
BUGS
Possibly many.
NOTE: If a user copies a URL (containing the `winsid' value) and pastes
it in a new browser window (or sends it to another user) - then both
windows will share the same sessions. This can be viewed as a bug (The
per-window mechanism does not really guarentee to be a single-window
session) or a feature (users can easily share their session state with
other users).
Please report any bugs or feature requests to
SEE ALSO
Dancer, Dancer::Plugin
Example
See the `eg/' directory for a complete source of the example. Run: `perl
SUPPORT
You can find documentation for this module with the perldoc command.
perldoc Dancer::Plugin::WindowSession
ACKNOWLEDGEMENTS
The implementation was influenced by the UCSC Genome Browser website,
which uses the `hgsid' CGI variable in the same manner.
LICENSE AND COPYRIGHT
Copyright 2012 Assaf Gordon.
This program is free software; you can redistribute it and/or modify it
under the terms of either: the GNU General Public License as published
by the Free Software Foundation; or the Artistic License.