bug79031.phpt 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. --TEST--
  2. Bug #79031: Session unserialization problem
  3. --EXTENSIONS--
  4. session
  5. --INI--
  6. error_reporting=E_ALL&~E_DEPRECATED
  7. --FILE--
  8. <?php
  9. class SerializableClass implements Serializable {
  10. public $sharedProp;
  11. public function __construct($prop)
  12. {
  13. $this->sharedProp = $prop;
  14. }
  15. public function __set($key, $value)
  16. {
  17. $this->$key = $value;
  18. }
  19. public function serialize()
  20. {
  21. return serialize(get_object_vars($this));
  22. }
  23. public function unserialize($data)
  24. {
  25. $ar = unserialize($data);
  26. if ($ar === false) {
  27. return;
  28. }
  29. foreach ($ar as $k => $v) {
  30. $this->__set($k, $v);
  31. }
  32. }
  33. }
  34. // Shared object that acts as property of two another objects stored in session
  35. $testPropertyObj = new stdClass();
  36. $testPropertyObj->name = 'test';
  37. // Two instances of \SerializableClass that shares property
  38. $sessionObject = [
  39. 'obj1' => new SerializableClass($testPropertyObj),
  40. 'obj2' => new SerializableClass($testPropertyObj),
  41. ];
  42. session_start();
  43. $_SESSION = $sessionObject;
  44. $sessionString = session_encode();
  45. session_decode($sessionString);
  46. echo $sessionString;
  47. echo "\n\n";
  48. var_dump($_SESSION);
  49. ?>
  50. --EXPECT--
  51. 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;}}
  52. array(2) {
  53. ["obj1"]=>
  54. object(SerializableClass)#4 (1) {
  55. ["sharedProp"]=>
  56. object(stdClass)#5 (1) {
  57. ["name"]=>
  58. string(4) "test"
  59. }
  60. }
  61. ["obj2"]=>
  62. object(SerializableClass)#6 (1) {
  63. ["sharedProp"]=>
  64. object(stdClass)#5 (1) {
  65. ["name"]=>
  66. string(4) "test"
  67. }
  68. }
  69. }