xref: /webtrees/app/Session.php (revision 76a5e7c78a07f5736a3cd5b7437c8f18dc196a5e)
1<?php
2/**
3 * webtrees: online genealogy
4 * Copyright (C) 2017 webtrees development team
5 * This program is free software: you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation, either version 3 of the License, or
8 * (at your option) any later version.
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16namespace Fisharebest\Webtrees;
17
18/**
19 * Temporary class to migrate to Symfony-based sessions, which need PHP 5.4.
20 */
21class Session {
22	/**
23	 * Start a session
24	 *
25	 * @param array $config
26	 */
27	public static function start(array $config = []) {
28		$default_config = [
29			'use_cookies'     => 1,
30			'name'            => 'WT_SESSION',
31			'cookie_lifetime' => 0,
32			'gc_maxlifetime'  => 7200,
33			'gc_probability'  => 1,
34			'gc_divisor'      => 100,
35			'cookie_path'     => '',
36			'cookie_httponly' => true,
37		];
38		session_register_shutdown();
39		foreach ($config + $default_config as $key => $value) {
40			ini_set('session.' . $key, $value);
41		}
42		session_start();
43	}
44
45	/**
46	 * Read a value from the session
47	 *
48	 * @param string $name
49	 * @param mixed  $default
50	 *
51	 * @return mixed
52	 */
53	public static function get($name, $default = null) {
54		if (isset($_SESSION[$name])) {
55			return $_SESSION[$name];
56		} else {
57			return $default;
58		}
59	}
60
61	/**
62	 * Write a value to the session
63	 *
64	 * @param string $name
65	 * @param mixed  $value
66	 */
67	public static function put($name, $value) {
68		$_SESSION[$name] = $value;
69	}
70
71	/**
72	 * Remove a value from the session
73	 *
74	 * @param string $name
75	 */
76	public static function forget($name) {
77		unset($_SESSION[$name]);
78	}
79
80	/**
81	 * Does a session variable exist?
82	 *
83	 * @param string $name
84	 *
85	 * @return bool
86	 */
87	public static function has($name) {
88		return isset($_SESSION[$name]);
89	}
90
91	/**
92	 * Remove all stored data from the session.
93	 */
94	public static function clear() {
95		$_SESSION = [];
96	}
97
98	/**
99	 * After any change in authentication level, we should use a new session ID.
100	 *
101	 * @param bool $destroy
102	 */
103	public static function regenerate($destroy = false) {
104		if ($destroy) {
105			self::clear();
106		}
107		session_regenerate_id($destroy);
108	}
109
110	/**
111	 * Set an explicit session ID. Typically used for search robots.
112	 *
113	 * @param string $id
114	 */
115	public static function setId($id) {
116		session_id($id);
117	}
118}
119