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 https://github.com/agordon/Dancer-Plugin-WindowSession/issues
SEE ALSO
Example
See working example at: http://winsid.cancan.cshl.edu .
See the eg/
directory for a complete source of the example. Run: perl -I./lib/ eg/example/bin/app.pl
then visit http://localhost:3000 .
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.
See http://dev.perl.org/licenses/ for more information.