It does sound like you're right. Like ZA is perhaps allowing the user's request to go twice. This is akin to people who double click on links because that's what they're used to doing on windows icons. However, it seems a bit odd how it selects to do it. It seems that if it did it twice on every call, one would expect the count to go immediately to 2 rather than start at one. Or does the session only begin after that first item is clicked?
Have you tested this on several machines? Mike "Neil Stirton" <[EMAIL PROTECTED]> wrote in message [EMAIL PROTECTED]">news:[EMAIL PROTECTED]... > Hi, > > I've started developing a shopping cart and was just testing and found > that I get strange results when Zone Alarm's Cookie Control is set to > anything other than "Off". > > If anything, I would expect the shopping cart to forget its contents > between pages but instead I am getting weird results. > > > (I have many other files/classes being called from this test.php file) > > test.php > -------- > <html> > <head> > > <?php > // I include all my necessary files/functions (none of which require the > session > // to already be started) > > session_start(); > if ( !isset( $_SESSION[ 'cart' ] ) ) { > $_SESSION[ 'cart' ] = new Cart(); > } > > ?> > > </head> > <body> > > > <?php > $f_id = isset( $_POST[ 'f_id' ] ) ? $_POST[ 'f_id' ] : 1; > $f_price = isset( $_POST[ 'f_price' ] ) ? $_POST[ 'f_price' ] : 0; > $f_qty = isset( $_POST[ 'f_qty' ] ) ? $_POST[ 'f_qty' ] : 1; > $f_desc = isset( $_POST[ 'f_desc' ] ) ? $_POST[ 'f_desc' ] : ''; > > // Form action > $f_act = isset( $_POST[ 'f_act' ] ) ? $_POST[ 'f_act' ] : ''; > > if ( $f_act == 'add' ) { > $_SESSION[ 'cart' ] -> add_item( $f_id, $f_qty, $f_desc, $f_price, '' ); > } elseif ( $f_act == 'remove' ) { > $_SESSION[ 'cart' ] -> remove_item( $f_id ); > } elseif ( $f_act == 'update' ) { > $_SESSION[ 'cart' ] -> update_item( $f_id, $f_qty, $f_price, false ); > } else { > echo '<pre>'; > print_r ($_SESSION); > echo '</pre>'; > } > > ?> > > > <form action="<?php echo $_SERVER[ 'PHP_SELF' ]; ?>" method="post"> > <input type="hidden" name="f_price" value="10.00" /> > Product = CD > <input type="hidden" name="f_desc" value="CD" /> > <input type="hidden" name="f_id" value="1" /> > Qty:<input type="text" name="f_qty" size="3" maxlength="4" value="1" /> > <input type="submit" name="f_act" value="add" class="button" /> > <input type="submit" name="f_act" value="remove" class="button" /> > <input type="submit" name="f_act" value="update" class="button" /> > </form> > > > <?php > echo '<pre>'; > print_r ($_SESSION); > echo '</pre>'; > > ?> > </body> > </html> > > -------------------------------------------------------------- > > This script obviously calls itself (not sure if that is part of the > problem?) > > > Scenario (with ZA cookie control set to Medium) > ----------------------------------------------- > > Leave the quantity set to 1 and click add, the session then shows that there > is one item in the cart. > > Click add again and there are 3 items in the cart. > Click again and there are 5 items. > > If I now change the quantity to say 10, there will be 16 items (the 5 that > were > there a minute ago plus the 10 plus what appears to be the value that > quantity > was previously set to i.e. 1. > > Thus if I then go and set the quantity to 5, it will take the previous value > (10) > plus the new value (5) and add it to the cart (16), giving 31. > > > Turning ZA OFF and all works as expected. > > Since my cart is a serious of objects/arrays, I changed the following to try > and track > down the problem. > > Changed: > -------- > session_start(); > if ( !isset( $_SESSION[ 'cart' ] ) ) { > $_SESSION[ 'cart' ] = new Cart(); > } > > ?> > > > To: > --- > session_start(); > if ( !isset( $_SESSION[ 'cart' ] ) ) { > $_SESSION[ 'cart' ] = new Cart(); > $_SESSION[ 'count' ] = 0; > } > > $_SESSION[ 'count' ]++; > echo $_SESSION[ 'count' ]; > ?> > > > The count variable was also going up in the same fashion as the cart items > which makes me think that the page itself is being called several times > before > being displayed. > > > I'm tearing my hair out here and I can't leave it as is and the cart has to > go into production and I can't have people buying 31 items when they wanted > 3 :) > > Anyone any suggestions at all. > > > Regards, > > Neil Stiron > -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php