blob: 0eca83905cb682805c26caeb03af6a8bc8d58be6 [file] [log] [blame]
Andrey Andreev47a47fb2014-05-31 16:08:30 +03001<?php
2/**
3 * CodeIgniter
4 *
5 * An open source application development framework for PHP 5.2.4 or newer
6 *
Andrey Andreev46f2f262014-11-11 14:37:51 +02007 * This content is released under the MIT License (MIT)
Andrey Andreev47a47fb2014-05-31 16:08:30 +03008 *
Andrey Andreev46f2f262014-11-11 14:37:51 +02009 * Copyright (c) 2014, British Columbia Institute of Technology
Andrey Andreev47a47fb2014-05-31 16:08:30 +030010 *
Andrey Andreev46f2f262014-11-11 14:37:51 +020011 * 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:
Andrey Andreev47a47fb2014-05-31 16:08:30 +030017 *
Andrey Andreev46f2f262014-11-11 14:37:51 +020018 * 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
Andrey Andreev47a47fb2014-05-31 16:08:30 +030031 * @copyright Copyright (c) 2008 - 2014, EllisLab, Inc. (http://ellislab.com/)
Andrey Andreev46f2f262014-11-11 14:37:51 +020032 * @copyright Copyright (c) 2014, British Columbia Institute of Technology (http://bcit.ca/)
33 * @license http://opensource.org/licenses/MIT MIT License
34 * @link http://codeigniter.com
35 * @since Version 3.0.0
Andrey Andreev47a47fb2014-05-31 16:08:30 +030036 * @filesource
37 */
38defined('BASEPATH') OR exit('No direct script access allowed');
39
40/**
41 * CodeIgniter Session Driver Class
42 *
Andrey Andreev46f2f262014-11-11 14:37:51 +020043 * @package CodeIgniter
Andrey Andreev47a47fb2014-05-31 16:08:30 +030044 * @subpackage Libraries
45 * @category Sessions
Andrey Andreev46f2f262014-11-11 14:37:51 +020046 * @author Andrey Andreev
47 * @link http://codeigniter.com/user_guide/libraries/sessions.html
Andrey Andreev47a47fb2014-05-31 16:08:30 +030048 */
49abstract class CI_Session_driver implements SessionHandlerInterface {
50
Andrey Andreevdfb39be2014-10-06 01:50:14 +030051 protected $_config;
Andrey Andreev47a47fb2014-05-31 16:08:30 +030052
53 /**
Andrey Andreev93d9fa72014-08-27 22:14:36 +030054 * Data fingerprint
Andrey Andreev47a47fb2014-05-31 16:08:30 +030055 *
56 * @var bool
57 */
58 protected $_fingerprint;
59
Andrey Andreev93d9fa72014-08-27 22:14:36 +030060 /**
61 * Lock placeholder
62 *
63 * @var mixed
64 */
65 protected $_lock = FALSE;
66
Andrey Andreev7474a672014-10-31 23:35:32 +020067 /**
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
Andrey Andreev47a47fb2014-05-31 16:08:30 +030077 // ------------------------------------------------------------------------
78
79 /**
80 * Class constructor
81 *
82 * @param array $params Configuration parameters
83 * @return void
84 */
Andrey Andreevdfb39be2014-10-06 01:50:14 +030085 public function __construct(&$params)
Andrey Andreev47a47fb2014-05-31 16:08:30 +030086 {
Andrey Andreevdfb39be2014-10-06 01:50:14 +030087 $this->_config =& $params;
Andrey Andreev47a47fb2014-05-31 16:08:30 +030088 }
89
90 // ------------------------------------------------------------------------
91
92 protected function _cookie_destroy()
93 {
94 return setcookie(
Andrey Andreevdfb39be2014-10-06 01:50:14 +030095 $this->_config['cookie_name'],
Andrey Andreev47a47fb2014-05-31 16:08:30 +030096 NULL,
97 1,
Andrey Andreevdfb39be2014-10-06 01:50:14 +030098 $this->_config['cookie_path'],
99 $this->_config['cookie_domain'],
100 $this->_config['cookie_secure'],
101 TRUE
Andrey Andreev47a47fb2014-05-31 16:08:30 +0300102 );
103 }
104
Andrey Andreev93d9fa72014-08-27 22:14:36 +0300105 // ------------------------------------------------------------------------
106
107 /**
108 * Get lock
109 *
110 * A default locking mechanism via semaphores, if ext/sysvsem is available.
111 *
112 * Drivers will usually override this and only fallback to it if no other
113 * locking mechanism is available.
114 *
115 * @param string $session_id
116 * @return bool
117 */
118 protected function _get_lock($session_id)
119 {
120 if ( ! extension_loaded('sysvsem'))
121 {
122 $this->_lock = TRUE;
123 return TRUE;
124 }
125
Andrey Andreevdfb39be2014-10-06 01:50:14 +0300126 if (($this->_lock = sem_get($session_id.($this->_config['match_ip'] ? '_'.$_SERVER['REMOTE_ADDR'] : ''), 1, 0644)) === FALSE)
Andrey Andreev93d9fa72014-08-27 22:14:36 +0300127 {
128 return FALSE;
129 }
130
131 if ( ! sem_acquire($this->_lock))
132 {
133 sem_remove($this->_lock);
134 $this->_lock = FALSE;
135 return FALSE;
136 }
137
138 return TRUE;
139 }
140
141 // ------------------------------------------------------------------------
142
143 /**
144 * Release lock
145 *
146 * @return bool
147 */
148 protected function _release_lock()
149 {
150 if (extension_loaded('sysvsem') && $this->_lock)
151 {
152 sem_release($this->_lock);
153 sem_remove($this->_lock);
154 $this->_lock = FALSE;
155 }
156
157 return TRUE;
158 }
159
Andrey Andreev47a47fb2014-05-31 16:08:30 +0300160}
161
162/* End of file Session_driver.php */
163/* Location: ./system/libraries/Session/Session_driver.php */