Assaf Gordon > Dancer-Plugin-WindowSession-0.01 > Dancer::Plugin::WindowSession

Download:
Dancer-Plugin-WindowSession-0.01.tar.gz

Dependencies

Annotate this POD

View/Report Bugs
Module Version: 0.01   Source   Latest Release: Dancer-Plugin-WindowSession-0.02

NAME ^

Dancer::Plugin::WindowSession - Manage Per-Browser-Window sessions.

VERSION ^

version 0.01

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 ^

Dancer, Dancer::Plugin

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.

syntax highlighting: