[Dancer-users] Controlling Session expire time

Flavio Poletti polettix at gmail.com
Tue Apr 12 20:07:48 CEST 2011


I see space for a plugin here. Unless I'm overlooking something, you need a
way to temporarily set a configuration option and have it removed at the end
of the request:

# ... in your code
volatile session_expires => '...';  # whatever the business logic dictates


# ... in the plugin, proof of concept
my %original_for;
register volatile => sub {
   my ($name, $value) = @_;
   my $config = config();
   if (! exists $original_for{$name}) {
      $original_for{$name} = exists($config->{$name}) ? [ $config->{$name} ]
: undef;
   }
   set $name, $value;
};

after sub {  # restore original values
   my $config = config();
   while (my ($name, $value) = each %original_for) {
      delete $config->{$name};
      $config->{$name} = $value->[0] if ref $value;
   }
   %original_for = ();
};


Of course the restoration mechanism above somewhat breaks encapsulation for
config/set/setting. Could we possibly use only Dancer::Config::setting? The
tricky part is handling the "no previous value for this configuration" case.

And of course this does not play well with threads (but I wonder if Dancer
plays nice with them at all).

Cheers,

    Flavio.


On Tue, Mar 15, 2011 at 12:34 AM, Brian E. Lozier <brian at massassi.com>wrote:

> Hmm, I dug into the actual code and found this in
> Dancer::Session::Abstract:
>
>    if (my $expires = setting('session_expires')) {
>        $cookie{expires} =
>          Dancer::Cookie::_epoch_to_gmtstring(time + $expires);
>    }
>
> It appears I can have a global timeout option in the settings.  This
> is useful although I think I need something a bit more flexible.  I
> need to be able to choose a session time out based on user input.  For
> example, if they check "remember me" I want the session to expire in 2
> weeks, otherwise just use a session cookie.
>
> The write_session_id method is specifically mentioned as something I
> should not attempt to overload.  Does anyone have any ideas about how
> I can have a dynamic session timeout?
>
> Thanks again,
> Brian
>
>
> On Mon, Mar 14, 2011 at 4:27 PM, Brian E. Lozier <brian at massassi.com>
> wrote:
> > When I use Dancer::Session::YAML to create a session, the session
> > cookie is set to expire when the browser closes.  Is there a way for
> > me to set an expire time for the session cookie?  I looked in
> > Dancer::Session, Dancer::Session::YAML, Dancer::Cookbook, and
> > Dancer::Session::Abstract but didn't see anything (maybe I missed it).
> >
> > Thanks,
> > Brian
> >
> _______________________________________________
> Dancer-users mailing list
> Dancer-users at perldancer.org
> http://www.backup-manager.org/cgi-bin/listinfo/dancer-users
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.backup-manager.org/pipermail/dancer-users/attachments/20110412/0df853d8/attachment.htm>


More information about the Dancer-users mailing list