Just tried that....

<%perl>
        my %session;
        tie %session, 'Apache::Session::MySQL', undef, {
                Handle     => $DBH,
                LockHandle => $DBH
        };
</%perl>

        <h3>Setting some of the session keys<h3>
<%perl>
        $session{'car'} = {
                make => 'BMW',
                year => '2005',
                model => 'M3',
                color => 'Interlagos Blue'
        };

        $session{'user'} = $USEROBJECT;
</%perl>

        <h3>Dumping contents of %session <% $session{_session_id} %></h3>
% for my $key (keys %session) {
        <h3><% $key %> = <% $session{$key} %></h3>
% }

<h3><a href="dump.html?id=<% $session{_session_id} %>">dump.html</a></h3>

# here's the added undef <------
% undef %session;

But that also didn't work =(

On 5/11/05, Bart Simpson <[EMAIL PROTECTED]> wrote:
> 
> --- Rick <[EMAIL PROTECTED]> wrote:
> > On 5/10/05, Bart Simpson <[EMAIL PROTECTED]>
> > wrote:
> > >
> > > --- Rick <[EMAIL PROTECTED]> wrote:
> > > > I'm having problems with
> > > > MasonX::Request::WithApacheSession (using
> > > > Apache::Session::MySQL backend). The session is
> > not
> > > > being updated, so
> > > > I can't save any data to it. I verified this by
> > > > looking at the mysql
> > > > logs.
> > >
> > > Are you timestamping your session each time you
> > > updated it?  it only updates if you change
> > someting in
> > > top level of session hash, thus usually you
> > timestamp
> > > the session in top level when updating it.
> > >
> > > $session->{hash}->{key} = $new_val ; # won't cause
> > > update
> > >
> > > $session->{hash} = { key => $new_val }; # causes
> > > update cause hash address changed in top level.
> > >
> > > See docs Apache::Session docs for details about
> > this.
> > > Other than this I've never had this problem. Don't
> > use
> > > mason though.
> >
> > Interesting, it appears that the only API to the
> > MasonX::Request::WithApacheSession is through the
> > mason request object
> > (global $m). In order to test what you have
> > recommended, I created a
> > session using purely the Apache::Session::MySQL
> > class. I did this by
> > creating a seperate "set.html" mason/html file which
> > creates a new
> > session and sets some session values. The code is
> > below:
> >
> > -------------------BEGIN MASON CODE FOR
> >
> "set.html"-------------------------------------------------
> >
> > <%perl>
> >         my %session;
> >         tie %session, 'Apache::Session::MySQL',
> > undef, {
> >                 Handle     => $DBH,
> >                 LockHandle => $DBH
> >         };
> > </%perl>
> >
> >         <h3>Setting some of the session keys<h3>
> > <%perl>
> >         $session{'car'} = {
> >                 make => 'BMW',
> >                 year => '2005',
> >                 model => 'M3',
> >                 color => 'Interlagos Blue'
> >         };
> >
> >         $session{'user'} = $USEROBJECT;
> > </%perl>
> >
> >         <h3>Dumping contents of %session <%
> > $session{_session_id} %></h3>
> > % for my $key (keys %session) {
> >         <h3><% $key %> = <% $session{$key} %></h3>
> > % }
> >
> > <h3><a href="dump.html?id=<% $session{_session_id}
> > %>">dump.html</a></h3>
> >
> > -------------------END MASON CODE FOR
> >
> "set.html"-------------------------------------------------
> >
> > By viewing this page, the session key/values show up
> > correctly in the
> > HTML output. However, when I click the link to go to
> > the dump.html
> > page, nothing was saved. Below is the output for the
> > dump.html page.
> >
> > -------------------BEGIN MASON CODE FOR
> >
> "dump.html"-------------------------------------------------
> > <%args>
> >         $id
> > </%args>
> > <%perl>
> >         my %session;
> >         tie %session, 'Apache::Session::MySQL', $id,
> > {
> >                 Handle     => $DBH,
> >                 LockHandle => $DBH
> >         };
> > </%perl>
> >
> >         <h3>DUMPING Session from %session</h3>
> > % for my $key (sort keys %session) {
> >         <h3><% $key %> = <% $session{$key} %></h3>
> > % }
> >
> > <h3><a href="set.html">set.html</a></h3>
> >
> > -------------------END MASON CODE FOR
> >
> "dump.html"-------------------------------------------------
> >
> > On this page, the only key/value pair is:
> > _session_id => [MD5sessionidgoeshere]
> >
> > I checked the MySQL logs and there were only 3 calls
> > to it:
> >
> > 2005 Query       SELECT
> >
> GET_LOCK('Apache-Session-f050450049018ff9d77c9e4697700b5f',
> > 3600)
> > 2005 Query       INSERT INTO sessions (id,
> > a_session) VALUES
> > ('f050450049018ff9d77c9e4697700b5f','\0\0\0\n
> > f050450049018ff9d77c9e4697700b5f\0\0\0
> >                                       _session_id')
> > 2005 Query       SELECT
> >
> RELEASE_LOCK('Apache-Session-f050450049018ff9d77c9e4697700b5f')
> >
> > No UPDATE statements even though I'm changing things
> > in the top level hash.
> >
> > Any ideas?
> >
> 
> Apache::Session doc says it dies if it can't update
> the session.  Are you catching that die somewhere
> without realizing it?  Determine if update is
> attempted and fails or not attempted at all.
> 
> Try undefing the session (undef %session; # -- who
> says perl is cryptic ? ) as soon as you are done with
> it . "This will free up any locks associated with your
> process"  [docs]
> 
> HTH
> 
> Yahoo! Mail
> Stay connected, organized, and protected. Take the tour:
> http://tour.mail.yahoo.com/mailtour.html
> 
>

Reply via email to