Subversion-Projekte lars-tiefland.ci

Revision

Revision 2242 | Revision 2257 | Zur aktuellen Revision | Details | Vergleich mit vorheriger | Letzte Änderung | Log anzeigen | RSS feed

Revision Autor Zeilennr. Zeile
68 lars 1
<?php
2
/**
3
 * CodeIgniter
4
 *
5
 * An open source application development framework for PHP
6
 *
7
 * This content is released under the MIT License (MIT)
8
 *
2254 lars 9
 * Copyright (c) 2014 - 2017, British Columbia Institute of Technology
68 lars 10
 *
11
 * Permission is hereby granted, free of charge, to any person obtaining a copy
12
 * of this software and associated documentation files (the "Software"), to deal
13
 * in the Software without restriction, including without limitation the rights
14
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
15
 * copies of the Software, and to permit persons to whom the Software is
16
 * furnished to do so, subject to the following conditions:
17
 *
18
 * The above copyright notice and this permission notice shall be included in
19
 * all copies or substantial portions of the Software.
20
 *
21
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
22
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
23
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
24
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
25
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
26
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
27
 * THE SOFTWARE.
28
 *
29
 * @package	CodeIgniter
30
 * @author	EllisLab Dev Team
31
 * @copyright	Copyright (c) 2008 - 2014, EllisLab, Inc. (https://ellislab.com/)
2254 lars 32
 * @copyright	Copyright (c) 2014 - 2017, British Columbia Institute of Technology (http://bcit.ca/)
68 lars 33
 * @license	http://opensource.org/licenses/MIT	MIT License
34
 * @link	https://codeigniter.com
35
 * @since	Version 3.0.0
36
 * @filesource
37
 */
38
defined('BASEPATH') OR exit('No direct script access allowed');
39
 
40
/**
41
 * CodeIgniter Session Driver Class
42
 *
43
 * @package	CodeIgniter
44
 * @subpackage	Libraries
45
 * @category	Sessions
46
 * @author	Andrey Andreev
47
 * @link	https://codeigniter.com/user_guide/libraries/sessions.html
48
 */
49
abstract class CI_Session_driver implements SessionHandlerInterface {
50
 
51
	protected $_config;
52
 
53
	/**
54
	 * Data fingerprint
55
	 *
56
	 * @var	bool
57
	 */
58
	protected $_fingerprint;
59
 
60
	/**
61
	 * Lock placeholder
62
	 *
63
	 * @var	mixed
64
	 */
65
	protected $_lock = FALSE;
66
 
67
	/**
68
	 * Read session ID
69
	 *
70
	 * Used to detect session_regenerate_id() calls because PHP only calls
71
	 * write() after regenerating the ID.
72
	 *
73
	 * @var	string
74
	 */
75
	protected $_session_id;
76
 
77
	/**
78
	 * Success and failure return values
79
	 *
80
	 * Necessary due to a bug in all PHP 5 versions where return values
81
	 * from userspace handlers are not handled properly. PHP 7 fixes the
82
	 * bug, so we need to return different values depending on the version.
83
	 *
84
	 * @see	https://wiki.php.net/rfc/session.user.return-value
85
	 * @var	mixed
86
	 */
87
	protected $_success, $_failure;
88
 
89
	// ------------------------------------------------------------------------
90
 
91
	/**
92
	 * Class constructor
93
	 *
94
	 * @param	array	$params	Configuration parameters
95
	 * @return	void
96
	 */
97
	public function __construct(&$params)
98
	{
99
		$this->_config =& $params;
100
 
101
		if (is_php('7'))
102
		{
103
			$this->_success = TRUE;
104
			$this->_failure = FALSE;
105
		}
106
		else
107
		{
108
			$this->_success = 0;
109
			$this->_failure = -1;
110
		}
111
	}
112
 
113
	// ------------------------------------------------------------------------
114
 
115
	/**
116
	 * Cookie destroy
117
	 *
118
	 * Internal method to force removal of a cookie by the client
119
	 * when session_destroy() is called.
120
	 *
121
	 * @return	bool
122
	 */
123
	protected function _cookie_destroy()
124
	{
125
		return setcookie(
126
			$this->_config['cookie_name'],
127
			NULL,
128
			1,
129
			$this->_config['cookie_path'],
130
			$this->_config['cookie_domain'],
131
			$this->_config['cookie_secure'],
132
			TRUE
133
		);
134
	}
135
 
136
	// ------------------------------------------------------------------------
137
 
138
	/**
139
	 * Get lock
140
	 *
141
	 * A dummy method allowing drivers with no locking functionality
142
	 * (databases other than PostgreSQL and MySQL) to act as if they
143
	 * do acquire a lock.
144
	 *
145
	 * @param	string	$session_id
146
	 * @return	bool
147
	 */
148
	protected function _get_lock($session_id)
149
	{
150
		$this->_lock = TRUE;
151
		return TRUE;
152
	}
153
 
154
	// ------------------------------------------------------------------------
155
 
156
	/**
157
	 * Release lock
158
	 *
159
	 * @return	bool
160
	 */
161
	protected function _release_lock()
162
	{
163
		if ($this->_lock)
164
		{
165
			$this->_lock = FALSE;
166
		}
167
 
168
		return TRUE;
169
	}
170
 
171
	// ------------------------------------------------------------------------
172
 
173
	/**
174
	 * Fail
175
	 *
176
	 * Drivers other than the 'files' one don't (need to) use the
177
	 * session.save_path INI setting, but that leads to confusing
178
	 * error messages emitted by PHP when open() or write() fail,
179
	 * as the message contains session.save_path ...
180
	 * To work around the problem, the drivers will call this method
181
	 * so that the INI is set just in time for the error message to
182
	 * be properly generated.
183
	 *
184
	 * @return	mixed
185
	 */
186
	protected function _fail()
187
	{
188
		ini_set('session.save_path', config_item('sess_save_path'));
189
		return $this->_failure;
190
	}
191
}