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] ar...@php.net 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] sni...@php.net | 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