Edit report at https://bugs.php.net/bug.php?id=33786&edit=1
ID: 33786
Comment by: boolie2051 at hotmail dot co dot uk
Reported by: simon dot bettison at blueyonder dot co dot uk
Summary: $_SESSION not saving when an element's index
contains pipe '|' character
Status: Assigned
Type: Feature/Change Request
Package: Session related
Operating System: Gentoo Linux
PHP Version: 5.1.0b3
Assigned To: arpad
Block user comment: N
Private report: N
New Comment:
Can someone explain why| is not allowed in variable names but it is in array
indexes.
Previous Comments:
------------------------------------------------------------------------
[2011-10-04 22:39:48] tkllingenberg at lastflood dot net
I assume this is because the serialized form of sessions (as for the PHP
serialization handler) contains the pipe character "|" as a separator between
variable names.
The pipe example:
<?php
$_SESSION['a|b'] = 'c';
echo session_encode(); # '' - empty string
?>
I assume this, because other illegal variable names, like a variable starting
with a number, _are_ possible, for example:
<?php
$_SESSION['0a'] = '1a';
echo session_encode(); # '0a|s:2:"1a";'
?>
If you change the session serialize-handler to "php_binary" (was: "php" in the
exmaples above), this might already work (returns values containing the data in
both cases).
Tested against PHP 5.3.8.
------------------------------------------------------------------------
[2011-08-19 18:41:35] [email protected]
It's an artifact of register_globals/session_register, could be fixed now
that they're gone and I wrote a patch to do so a couple of years ago but
some issues emerged and I haven't got around to addressing them yet.
If you raise a feature request someone else may get to it sooner.
------------------------------------------------------------------------
[2011-08-19 15:09:42] lgandras at gmail dot com
May i ask why isn't the full session just serialized like a normal array?
------------------------------------------------------------------------
[2005-07-20 13:37:34] [email protected]
| is not allowed in variable names. (yes, I know you can use it in array
indexes, but $_SESSION is special in many ways)
------------------------------------------------------------------------
[2005-07-20 13:23:54] simon dot bettison at blueyonder dot co dot uk
Description:
------------
A script registers a variable in $_SESSION using and index value which contains
a pipe ("|"),
ie
$index = "some|index";
$_SESSION[$index]="some variable";
I expected this variable (and any other variables registered in $_SESSION) to
be stored, and made available to other script(s) executed in the same session
for the lifetime of the session cookie.
However, subseqent access to $_SESSION indicates that the $_SESSION variable
contains no data at all.
This only seems to occur following the use of the pipe ("|") character in the
element's index.
Reproduce code:
---------------
<?php
session_start();
print_r($_SESSION);
$_SESSION["some|variable"]="some value";
print_r($_SESSION);
?>
Expected result:
----------------
First execution:
Array ( ) Array ( [some|variable] => some value )
Second & Subsequent execution
Array ( [some|variable] => some value ) Array ( [some|variable] => some value )
Actual result:
--------------
First execution:
Array ( ) Array ( [some|variable] => some value )
Second & Subsequent execution
Array ( ) Array ( [some|variable] => some value )
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=33786&edit=1