Re: unregister part of array in session
| From: | Yasuo Ohgaki | 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
>