Edit report at https://bugs.php.net/bug.php?id=43980&edit=1
ID: 43980 Comment by: tklingenberg at lastflood dot net Reported by: rhm31 at cam dot ac dot uk Summary: Difficult to unserialize session data in user session save function Status: Open Type: Feature/Change Request Package: Session related Operating System: * PHP Version: * Block user comment: N Private report: N New Comment: If you want to encode something else (e.g. an array with keys as variable names), you can just mimic the PHP session handler by: <?php $encoded = ''; foreach($array as $name => $value) { $encoded .= $name.'|'.serialize($value); } ?> Ensure that the serialize handler as well as the session serialize handler is "PHP". Decoding is not that simple however, you would require a library https://github.com/ktomk/Serialized as of now. To have another tool in the box, a decode/encode function pair with a parameter of type "variable" array (like $_SESSION) and a parameter type string with the name of the serialize handler would be useful, maybe even two function pairs, one for session (variable list) and one for the actual values (un/serialize) but I think this won't work for the serially encoded values out of the box, so you always need to unserialize all, which means instantiation of objects etc.. Previous Comments: ------------------------------------------------------------------------ [2008-03-17 15:12:00] rhm31 at cam dot ac dot uk >From the documentation: session_encode (PHP 4, PHP 5) session_encode Encodes the current session data as a string Description string session_encode ( void ) This signature is wrong, since it assumes you want to encode the current $_SESSION variable, but sometimes you don't want to and you want to encode something else. This is not specific to PHP4 only. ------------------------------------------------------------------------ [2008-03-17 00:47:58] j...@php.net We are sorry, but we can not support PHP 4 related problems anymore. Momentum is gathering for PHP 6, and we think supporting PHP 4 will lead to a waste of resources which we want to put into getting PHP 6 ready. ------------------------------------------------------------------------ [2008-01-30 02:49:47] rhm31 at cam dot ac dot uk Description: ------------ A custom session handler has a save function, which is given an opaque piece of session data. No functions are provided to modify this data, even though this can be useful in some cases. As a workaround, session_decode and session_encode can be used. However, there are some problems: 1. BUG:session_start() must be called in the save function; presumably because in the save handler the session is already closed. 2. HARD TO USE:The functions do not simply take a string and return an array or vise-versa; instead they work directly on the $_SESSION array. This means you cannot easily use them for generic purposes. A function that implements decode_session below could be added to the standard library, and the existing functions deprecated, since this function subsumes them. Also, a similar function for encode_session. Reproduce code: --------------- function decode_session($session_string) { $current_session=session_encode(); foreach($_SESSION as $key => $value) { unset($_SESSION[$key]); } session_decode($session_string); $restored_session = $_SESSION; foreach ($_SESSION as $key => $value){ unset($_SESSION[$key]); } session_decode($current_session); return $restored_session; } Expected result: ---------------- The session_string to be decoded and returned as an array. Actual result: -------------- An empty array is returned with no error message when above function is called from a session save handler. ------------------------------------------------------------------------ -- Edit this bug report at https://bugs.php.net/bug.php?id=43980&edit=1