123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- --TEST--
- Bug #79031: Session unserialization problem
- --EXTENSIONS--
- session
- --INI--
- error_reporting=E_ALL&~E_DEPRECATED
- --FILE--
- <?php
- class SerializableClass implements Serializable {
- public $sharedProp;
- public function __construct($prop)
- {
- $this->sharedProp = $prop;
- }
- public function __set($key, $value)
- {
- $this->$key = $value;
- }
- public function serialize()
- {
- return serialize(get_object_vars($this));
- }
- public function unserialize($data)
- {
- $ar = unserialize($data);
- if ($ar === false) {
- return;
- }
- foreach ($ar as $k => $v) {
- $this->__set($k, $v);
- }
- }
- }
- // Shared object that acts as property of two another objects stored in session
- $testPropertyObj = new stdClass();
- $testPropertyObj->name = 'test';
- // Two instances of \SerializableClass that shares property
- $sessionObject = [
- 'obj1' => new SerializableClass($testPropertyObj),
- 'obj2' => new SerializableClass($testPropertyObj),
- ];
- session_start();
- $_SESSION = $sessionObject;
- $sessionString = session_encode();
- session_decode($sessionString);
- echo $sessionString;
- echo "\n\n";
- var_dump($_SESSION);
- ?>
- --EXPECT--
- obj1|C:17:"SerializableClass":65:{a:1:{s:10:"sharedProp";O:8:"stdClass":1:{s:4:"name";s:4:"test";}}}obj2|C:17:"SerializableClass":28:{a:1:{s:10:"sharedProp";r:3;}}
- array(2) {
- ["obj1"]=>
- object(SerializableClass)#4 (1) {
- ["sharedProp"]=>
- object(stdClass)#5 (1) {
- ["name"]=>
- string(4) "test"
- }
- }
- ["obj2"]=>
- object(SerializableClass)#6 (1) {
- ["sharedProp"]=>
- object(stdClass)#5 (1) {
- ["name"]=>
- string(4) "test"
- }
- }
- }
|