jdtoronto has asked for the wisdom of the Perl Monks concerning the following question:

Esteemed monks,

I have been experimenting with a very simple shopping cart which emaultes another product we can no longer use (cart provider does not handle our payment processor).

In the following code CGI::Session appears to be not writing the session back to the MySQL database when I do a 'clear' cmd. I query the sessions table on the MySQL monitor. It has the session with say a number of items in the CART variable. I execute the 'clear' command from the borwaser and it displays an empty cart. BUT - I check the db table and it hasn't changed! So when I do another add I have all the previous items as well as the new one added after the 'clear'.

Here is a snippet of the code showing one sub that works and one that doesn't!

sub clrCart { my ($cgi, $session) = @_; my $cart = $session->param("CART") || []; $cart = []; $session->param("CART", $cart); return displayCart($cgi, $session); } sub addItemCart { my ($cgi, $session, $orderitem) = @_; &getItemForCart($cgi, $session); # get current cart contents my $cart = $session->param("CART") || []; # add selected item push @{$cart}, $orderitem; # update the CART in the session $session->param( "CART", $cart ); return displayCart($cgi, $session); }
The complete code is available on my scratchpad jdtoronto's scratchpad

Thanks for looking! ....john

Replies are listed 'Best First'.
Re: CGI::Session not writing to database?
by antirice (Priest) on Aug 06, 2003 at 19:00 UTC

    Try doing $session->flush() after updating.

    Hope this helps.

    antirice    
    The first rule of Perl club is - use Perl
    The
    ith rule of Perl club is - follow rule i - 1 for i > 1