[Catalyst] Force the session to be saved.

Andrew Rodland andrew at cleverdomain.org
Tue Mar 29 18:33:03 GMT 2011


On Tuesday, March 29, 2011 12:46:32 PM Duncan Garland wrote:
> Hi,
> 
> We've been having some peculiar behaviour from our system. I think it's
> because the controller which produces the HTML page stores data in the
> session for retrieval by the controller which produces the associated
> javascript file.
> 
> The client begins processing the HTML page as soon as it starts to arrive.
> When it reaches the script tag it requests the javascript page.
> Occasionally the first controller hasn't written the session to the
> database when the javascript controller tries to retrieve it.
> (Catalyst::Plugin::Session::Store::DBIC).
> 
> I can move the script tag down the page a bit, but what I really need is a
> way to force the session to be written before the HTML template is
> rendered.
> 
> Something like:
> 
> $c->session->{javascript}->{$template}  = { one = 1, two => 2};
> $c->session->save;
> 
> Is there such a method?
> 
> Regards
> 
> Duncan

finalize_session (which writes the session to the DB) runs before 
finalize_body (which writes the response to the client), so Catalyst already 
does what you would like it to, and forcing a session write before running the 
view is unlikely to help anything. I suspect either your database isn't 
guaranteeing ordering, or the problem is somewhere other than where you're 
looking.

Andrew



More information about the Catalyst mailing list