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