Re: unregister part of array in session

From: Date: Mon, 16 Apr 2001 13:36:32 +0000
Subject: Re: unregister part of array in session
References: 1 2 3  Groups: php.general 
Request: Send a blank email to php-general+get-48739@lists.php.net to get a copy of this message
PHP4 session may not work as it should, unless you use it consistent way. i.e. Use session_(un)register() and only use globals, OR enable track_vars and disable register_globals and only use $HTTP_SESSION_VARS w/o session_(un)register(). It may work even if register_globals is on. I didn't test session module with this configuration enough. Following code works as expected on my systems (PHP4.0.4-PHP4.0.5RC1/Apache SAPI/W2K and PHP4.0.4-PHP4.0.4RC6/Apache SAPI/Linux at least) === code begin === <?php require_once('lib/session.inc'); // Define my custom session handlers and start session ?> <html> <head> <title>Session Test</title> </head> <body bgcolor="#FFFFFF"> <pre> <?php if (isset($HTTP_GET_VARS['a'])) { $HTTP_SESSION_VARS['a'] = array( 'a'=>1, 'b'=>2 ); print_r($HTTP_SESSION_VARS); } elseif (isset($HTTP_GET_VARS['b'])) { unset($HTTP_SESSION_VARS['a']['a']); print_r($HTTP_SESSION_VARS); } else { print_r($HTTP_SESSION_VARS); } ?> </pre> </body> </html> ==== code end ==== It should work as expected when you enable track_vars AND disable register_globals in your php.ini. The reason why there is session_register()/unregister() is there is no way for session module to know which variables are session variables. With $HTTP_SESSION_VARS, session module knows all variable in $HTTP_SESSION_VARS are session variables. So programmer does not have to use session_(un)register(). There is also known problem that $HTTP_SESSION_VARS does not work like other $HTTP_*_VARS. You will see what I mean if you write some test codes with register_globals = on. I don't know why many people use register_globals = on track_vars = off magic_quote = on Life would be much easier with register_globals = off track_vars = on magic_quote = off Hope this helps, -- Yasuo Ohgaki ""Tobias Talltorp"" <tobias@talltorp.com> wrote in message news:9bempj$a77$1@toye.p.sourceforge.net... > I did it! > Too much work for something as simple as this though IMO. I think I will > write a function for this... > > <? > session_start(); > $newarray = $HTTP_SESSION_VARS["array"]; > unset ($newarray["one"]); > $array = $newarray; > session_register("array"); > ?> > > Thanks, > // Tobias > > > ""Yasuo Ohgaki"" <yohgaki@hotmail.com> wrote in message > news:9bdeag$88r$1@toye.p.sourceforge.net... > > You are registered $array as session, > > You need to unset() element. I think it should work. > > > > Regards, > > -- > > Yasuo Ohgaki > > > > > > ""Tobias Talltorp"" <tobias@talltorp.com> wrote in message > > news:9bd8un$kqt$1@toye.p.sourceforge.net... > > > I know how to unset a specific value in an ordinary array: > > > unset ($array["one"]); > > > How do I do this if my array is in a session? > > > > > > Here is my code: > > > <? > > > session_start(); > > > $array = array(one=> "number one", two=> "Number two", > > > three=> "Number > > > three"); > > > session_register("array"); > > > ?> > > > > > > I tried this... Didn't work: > > > <? > > > session_start(); > > > session_unregister("array[one]"); > > > ?> > > > > > > Thanks, > > > // Tobias Talltorp > > > > > > > > > > > > > > > -- > > > PHP General Mailing List (http://www.php.net/) > > > To unsubscribe, e-mail: php-general-unsubscribe@lists.php.net > > > For additional commands, e-mail: php-general-help@lists.php.net > > > To contact the list administrators, e-mail: php-list-admin@lists.php.net > > > > > > > > > -- > > PHP General Mailing List (http://www.php.net/) > > To unsubscribe, e-mail: php-general-unsubscribe@lists.php.net > > For additional commands, e-mail: php-general-help@lists.php.net > > To contact the list administrators, e-mail: php-list-admin@lists.php.net > > > > > > -- > PHP General Mailing List (http://www.php.net/) > To unsubscribe, e-mail: php-general-unsubscribe@lists.php.net > For additional commands, e-mail: php-general-help@lists.php.net > To contact the list administrators, e-mail: php-list-admin@lists.php.net >

« previous php.general (#48739) next »