Re: session_start() should not reset $_SESSIOn if it's not empty
| From: | Rowan Collins | Date: | Fri, 28 Jul 2017 14:11:16 +0000 |
| Subject: | Re: session_start() should not reset $_SESSIOn if it's not empty | ||
| References: | 1 2 3 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-100083@lists.php.net to get a copy of this message | ||
On 28 July 2017 14:37:10 BST, "lists@rhsoft.net" <lists@rhsoft.net> wrote:
>(Arguably, all the other superglobals should be read only for the same
>reason, but that would be a huge break now.)
>
>make them readonly would break my whole codebase
Yes, I only meant that as an absolutely hypothetical "if I had a time machine and could design
it a different way...", I realise it would break everything to change it now.
>> If I understand you right, the scenario you describe is "I don't want
>to start a session yet, but if and when I do, I want to put this data
>into it". It feels like that could be adequately handled in userland
>with a wrapper object (or global var and functions if you prefer),
>which reads to and from $_SESSION when a session is open, but a a
>holding array when it's not yet.
>
>that don't work because at this point you don't know in userland if you
>started a completly new session which should be initialized with values
>for follow-up requests or use the existing values from a previous
>request - at least not without writing ugly code
Do you mean like this?
session_start();
if ( ! $_SESSION['initialised'] ) {
$_SESSION['initialised'] = true;
foreach ( $this->session_init_vars as $var => $val ) {
$_SESSION[ $var ] = $val;
}
}
That should work as long as you don't run session_start() outside that function, and
centralising that is already necessary to avoid "already started" errors.
Regards,
--
Rowan Collins
[IMSoP]