1 | <?php |
||||||
2 | /* Divine CMS - Open source CMS for widespread use. |
||||||
3 | Copyright (c) 2019 Mykola Burakov ([email protected]) |
||||||
4 | |||||||
5 | See SOURCE.txt for other and additional information. |
||||||
6 | |||||||
7 | This file is part of Divine CMS. |
||||||
8 | |||||||
9 | This program is free software: you can redistribute it and/or modify |
||||||
10 | it under the terms of the GNU General Public License as published by |
||||||
11 | the Free Software Foundation, either version 3 of the License, or |
||||||
12 | (at your option) any later version. |
||||||
13 | |||||||
14 | This program is distributed in the hope that it will be useful, |
||||||
15 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||||
16 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||||
17 | GNU General Public License for more details. |
||||||
18 | |||||||
19 | You should have received a copy of the GNU General Public License |
||||||
20 | along with this program. If not, see <http://www.gnu.org/licenses/>. */ |
||||||
21 | |||||||
22 | namespace Divine\Engine\Library; |
||||||
23 | |||||||
24 | class Session implements \SessionHandlerInterface |
||||||
25 | { |
||||||
26 | // public $data = array(); |
||||||
27 | // public $expire; |
||||||
28 | |||||||
29 | public function __construct($registry) |
||||||
30 | { |
||||||
31 | // доступ к БД |
||||||
32 | $this->dbhProperties = $registry->get('dbhProperties'); |
||||||
0 ignored issues
–
show
Bug
Best Practice
introduced
by
![]() |
|||||||
33 | |||||||
34 | bdump($this->dbhProperties); |
||||||
35 | |||||||
36 | // $expire = ini_get('session.gc_maxlifetime'); |
||||||
37 | |||||||
38 | // Устанавливает пользовательские обработчики хранения сессии |
||||||
39 | // https://www.php.net/manual/ru/function.session-set-save-handler.php |
||||||
40 | session_set_save_handler(new \RememberMe\RememberMeSessionHandler($this->dbhProperties), true); |
||||||
41 | |||||||
42 | // if (!session_id()) { |
||||||
43 | |||||||
44 | // https://www.php.net/manual/en/session.configuration.php#ini.session.cookie-secure |
||||||
45 | ini_set('session.cookie_secure', '1'); |
||||||
46 | |||||||
47 | // https://www.php.net/manual/en/session.configuration.php#ini.session.cookie-httponly |
||||||
48 | ini_set('session.cookie_httponly', '1'); |
||||||
49 | |||||||
50 | // https://www.php.net/manual/ru/function.session-set-cookie-params.php |
||||||
51 | // session_set_cookie_params(0, '/'); |
||||||
52 | |||||||
53 | // стартуем сессию |
||||||
54 | session_start(); |
||||||
55 | // } |
||||||
56 | } |
||||||
57 | |||||||
58 | // public function __construct($registry) |
||||||
59 | // { |
||||||
60 | // $this->db = $registry->get('db'); |
||||||
61 | // $this->expire = ini_get('session.gc_maxlifetime'); |
||||||
62 | // } |
||||||
63 | |||||||
64 | public function start($key = 'default', $value = '') |
||||||
0 ignored issues
–
show
The parameter
$key is not used and could be removed.
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
This check looks for parameters that have been defined for a function or method, but which are not used in the method body. ![]() The parameter
$value is not used and could be removed.
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
This check looks for parameters that have been defined for a function or method, but which are not used in the method body. ![]() |
|||||||
65 | { |
||||||
66 | // по-умолчанию передается пустое значение |
||||||
67 | // if ($value) { |
||||||
68 | // $this->session_id = $value; |
||||||
69 | // если в куках уже существует значение |
||||||
70 | // } elseif (isset($_COOKIE[$key])) { |
||||||
71 | // делаем session_id таким же |
||||||
72 | // $this->session_id = $_COOKIE[$key]; |
||||||
73 | // если в куках значения нет, то создаем новое значение методом createSessionId() |
||||||
74 | // } else { |
||||||
75 | $this->session_id = $this->createSessionId(); |
||||||
0 ignored issues
–
show
|
|||||||
76 | // } |
||||||
77 | |||||||
78 | // if (!isset($_SESSION[$this->session_id])) { |
||||||
79 | // $_SESSION[$this->session_id] = array(); |
||||||
80 | // } |
||||||
81 | |||||||
82 | // $this->data = &$_SESSION[$this->session_id]; |
||||||
83 | |||||||
84 | // https://opencartforum.com/topic/82248-nastroyki-sessii/?do=findComment&comment=935102 |
||||||
85 | // if ($key != 'PHPSESSID') { |
||||||
86 | // setcookie( |
||||||
87 | // $key, |
||||||
88 | // $this->session_id, |
||||||
89 | // time() + ini_get('session.cookie_lifetime'), |
||||||
90 | // ini_get('session.cookie_path'), |
||||||
91 | // ini_get('session.cookie_domain'), |
||||||
92 | // ini_get('session.cookie_secure'), |
||||||
93 | // ini_get('session.cookie_httponly') |
||||||
94 | // ); |
||||||
95 | // } |
||||||
96 | |||||||
97 | return $this->session_id; |
||||||
98 | } |
||||||
99 | |||||||
100 | public function open($path, $name) |
||||||
101 | { |
||||||
102 | return parent::open($path, $name); |
||||||
103 | } |
||||||
104 | |||||||
105 | public function close() |
||||||
106 | { |
||||||
107 | return parent::close(); |
||||||
108 | } |
||||||
109 | |||||||
110 | public function read($session_id) |
||||||
111 | { |
||||||
112 | return parent::read($session_id); |
||||||
113 | } |
||||||
114 | |||||||
115 | // public function read($session_id) |
||||||
116 | // { |
||||||
117 | // $query = $this->db->query(" |
||||||
118 | // SELECT data |
||||||
119 | // FROM session |
||||||
120 | // WHERE session_id = '" . $this->db->escape($session_id) . "' |
||||||
121 | // AND expire > '" . $this->db->escape(date('Y-m-d H:i:s', time())) . "' |
||||||
122 | // "); |
||||||
123 | |||||||
124 | // if ($query->num_rows) { |
||||||
125 | // return json_decode($query->row['data'], true); |
||||||
126 | // } else { |
||||||
127 | // return false; |
||||||
128 | // } |
||||||
129 | // } |
||||||
130 | |||||||
131 | public function write($session_id, $data) |
||||||
132 | { |
||||||
133 | return parent::write($session_id, $data); |
||||||
134 | } |
||||||
135 | |||||||
136 | // public function write($session_id, $data) |
||||||
137 | // { |
||||||
138 | // if ($session_id) { |
||||||
139 | // $this->db->query(" |
||||||
140 | // REPLACE INTO session |
||||||
141 | // SET session_id = '" . $this->db->escape($session_id) . "', |
||||||
142 | // data = '" . $this->db->escape(json_encode($data)) . "', |
||||||
143 | // expire = '" . $this->db->escape(date('Y-m-d H:i:s', time() + $this->expire)) . "' |
||||||
144 | // "); |
||||||
145 | // } |
||||||
146 | |||||||
147 | // return true; |
||||||
148 | // } |
||||||
149 | |||||||
150 | public function destroy($session_id) |
||||||
151 | { |
||||||
152 | return parent::destroy($session_id); |
||||||
153 | } |
||||||
154 | |||||||
155 | // public function destroy($key = 'default') |
||||||
156 | // { |
||||||
157 | // if (isset($_SESSION[$key])) { |
||||||
158 | // unset($_SESSION[$key]); |
||||||
159 | // } |
||||||
160 | |||||||
161 | // setcookie( |
||||||
162 | // $key, |
||||||
163 | // '', |
||||||
164 | // time() - 42000, |
||||||
165 | // ini_get('session.cookie_path'), |
||||||
166 | // ini_get('session.cookie_domain') |
||||||
167 | // ); |
||||||
168 | // } |
||||||
169 | |||||||
170 | // public function destroy($session_id) |
||||||
171 | // { |
||||||
172 | // $this->db->query(" |
||||||
173 | // DELETE FROM session |
||||||
174 | // WHERE session_id = '" . $this->db->escape($session_id) . "' |
||||||
175 | // "); |
||||||
176 | |||||||
177 | // return true; |
||||||
178 | // } |
||||||
179 | |||||||
180 | public function gc($maxlifetime) |
||||||
181 | { |
||||||
182 | return parent::gc($maxlifetime); |
||||||
183 | } |
||||||
184 | |||||||
185 | // public function gc($expire) |
||||||
186 | // { |
||||||
187 | // $this->db->query(" |
||||||
188 | // DELETE FROM session |
||||||
189 | // WHERE expire < '" . $this->db->escape(date('Y-m-d H:i:s', time())) . "' |
||||||
190 | // "); |
||||||
191 | |||||||
192 | // return true; |
||||||
193 | // } |
||||||
194 | |||||||
195 | public function create_sid() |
||||||
0 ignored issues
–
show
|
|||||||
196 | { |
||||||
197 | $id = substr(bin2hex(openssl_random_pseudo_bytes(48)), 0, 48); |
||||||
198 | |||||||
199 | return $id; |
||||||
200 | } |
||||||
201 | |||||||
202 | public function createSessionId() |
||||||
203 | { |
||||||
204 | $id = substr(bin2hex(openssl_random_pseudo_bytes(26)), 0, 26); |
||||||
205 | |||||||
206 | return $id; |
||||||
207 | } |
||||||
208 | |||||||
209 | public function getSessionId() |
||||||
210 | { |
||||||
211 | return $this->session_id; |
||||||
212 | } |
||||||
213 | } |
||||||
214 |