123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114 |
- --TEST--
- session_set_save_handler test
- --EXTENSIONS--
- session
- --SKIPIF--
- <?php include('skipif.inc'); ?>
- --INI--
- session.use_cookies=0
- session.use_strict_mode=0
- session.cache_limiter=
- session.name=PHPSESSID
- session.serialize_handler=php
- --FILE--
- <?php
- error_reporting(E_ALL);
- ob_start();
- class handler {
- public $data = 'baz|O:3:"foo":2:{s:3:"bar";s:2:"ok";s:3:"yes";i:1;}arr|a:1:{i:3;O:3:"foo":2:{s:3:"bar";s:2:"ok";s:3:"yes";i:1;}}';
- function open($save_path, $session_name): bool
- {
- print "OPEN: $session_name\n";
- return true;
- }
- function close(): bool
- {
- return true;
- }
- function read($key): string|false
- {
- print "READ: $key\n";
- return $GLOBALS["hnd"]->data;
- }
- function write($key, $val): bool
- {
- print "WRITE: $key, $val\n";
- $GLOBALS["hnd"]->data = $val;
- return true;
- }
- function destroy($key): bool
- {
- print "DESTROY: $key\n";
- return true;
- }
- function gc() { return true; }
- }
- $hnd = new handler;
- class foo {
- public $bar = "ok";
- function method() { $this->yes++; }
- }
- session_set_save_handler(array($hnd, "open"), array($hnd, "close"), array($hnd, "read"), array($hnd, "write"), array($hnd, "destroy"), array($hnd, "gc"));
- session_id("test004");
- session_start();
- $_SESSION["baz"]->method();
- $_SESSION["arr"][3]->method();
- var_dump($_SESSION["baz"]);
- var_dump($_SESSION["arr"]);
- session_write_close();
- session_set_save_handler(array($hnd, "open"), array($hnd, "close"), array($hnd, "read"), array($hnd, "write"), array($hnd, "destroy"), array($hnd, "gc"));
- session_start();
- var_dump($_SESSION["baz"]);
- var_dump($_SESSION["arr"]);
- session_destroy();
- ?>
- --EXPECT--
- OPEN: PHPSESSID
- READ: test004
- object(foo)#2 (2) {
- ["bar"]=>
- string(2) "ok"
- ["yes"]=>
- int(2)
- }
- array(1) {
- [3]=>
- object(foo)#3 (2) {
- ["bar"]=>
- string(2) "ok"
- ["yes"]=>
- int(2)
- }
- }
- WRITE: test004, baz|O:3:"foo":2:{s:3:"bar";s:2:"ok";s:3:"yes";i:2;}arr|a:1:{i:3;O:3:"foo":2:{s:3:"bar";s:2:"ok";s:3:"yes";i:2;}}
- OPEN: PHPSESSID
- READ: test004
- object(foo)#3 (2) {
- ["bar"]=>
- string(2) "ok"
- ["yes"]=>
- int(2)
- }
- array(1) {
- [3]=>
- object(foo)#2 (2) {
- ["bar"]=>
- string(2) "ok"
- ["yes"]=>
- int(2)
- }
- }
- DESTROY: test004
|