1--TEST--
2Test session_set_save_handler() function: id interface
3--INI--
4session.save_handler=files
5session.name=PHPSESSID
6--SKIPIF--
7<?php include('skipif.inc'); ?>
8--FILE--
9<?php
10
11ob_start();
12
13/*
14 * Prototype : bool session_set_save_handler(SessionHandlerInterface $handler [, bool $register_shutdown_function = true])
15 * Description : Sets user-level session storage functions
16 * Source code : ext/session/session.c
17 */
18
19echo "*** Testing session_set_save_handler() function: id interface ***\n";
20
21class MySession2 implements SessionHandlerInterface, SessionIdInterface {
22	public $path;
23
24	public function open($path, $name) {
25		if (!$path) {
26			$path = sys_get_temp_dir();
27		}
28		$this->path = $path . '/u_sess_' . $name;
29		return true;
30	}
31
32	public function close() {
33		return true;
34	}
35
36	public function read($id) {
37		return @file_get_contents($this->path . $id);
38	}
39
40	public function write($id, $data) {
41		// Empty $data = 0 = false
42		return (bool)file_put_contents($this->path . $id, $data);
43	}
44
45	public function destroy($id) {
46		@unlink($this->path . $id);
47	}
48
49	public function gc($maxlifetime) {
50		foreach (glob($this->path . '*') as $filename) {
51			if (filemtime($filename) + $maxlifetime < time()) {
52				@unlink($filename);
53			}
54		}
55		return true;
56	}
57
58	public function create_sid() {
59		return 'my_sid';
60	}
61}
62
63$handler = new MySession2;
64session_set_save_handler($handler);
65session_start();
66
67$_SESSION['foo'] = "hello";
68
69var_dump(session_id(), ini_get('session.save_handler'), $_SESSION);
70
71session_write_close();
72session_unset();
73
74session_start();
75var_dump($_SESSION);
76
77session_write_close();
78session_unset();
79--EXPECTF--
80*** Testing session_set_save_handler() function: id interface ***
81string(%d) "my_sid"
82string(4) "user"
83array(1) {
84  ["foo"]=>
85  string(5) "hello"
86}
87array(1) {
88  ["foo"]=>
89  string(5) "hello"
90}
91