Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?
- /**
- * Настраиваемая сессия.
- * ©2014 Developed by Redee
- */
- class SessionR
- {
- /** @var array Необходимые параметры сессии */
- private $sess_params = [
- 'session.use_cookies',
- 'session.use_only_cookies',
- 'session.use_trans_sid',
- 'session.save_handler',
- 'session.save_path',
- 'session.cookie_lifetime',
- 'session.cookie_path',
- 'session.cookie_httponly',
- 'session.gc_maxlifetime',
- 'session.gc_probability',
- 'session.gc_divisor',
- 'session.name',
- ];
- /** @var array Хранятся начальные параметры сессии */
- private $sess_old_params = [];
- /** @var array Хранятся свои параметры сессии */
- private $sess_new_params = [];
- /**
- * @var int Время жизни куки у клиента в секундах.
- * Для {@link SessionR::setNewParams()}
- */
- private $coo_lifetime = 2592000;
- /**
- * @var int Время жизни сессии на сервере в секундах.
- * Для {@link SessionR::setNewParams()}
- */
- private $sess_lifetime = 2592000;
- /**
- * @var mixed Название сессии от которого
- * зависит место ее сохранения и чтения.
- * Для {@link SessionR::setNewParams()}
- */
- private $sess_name='main_sessionR';
- /**
- * @var mixed Название сайта/домена от которого
- * зависит место сохранения и чтения сессии.
- * Для {@link SessionR::setNewParams()}
- */
- private $site;
- /** @var bool Метка сессии SessionR */
- private $active_sessionR = false;
- /**
- * @param int $cs_lt
- * Задает время жизни куки и сессии в секундах {@link sessionR::coo_sess_lifetime}
- * По умолчанию 2592000 = 30 дней,
- * 0 = до закрытия браузера.
- *
- * @param string $se_n Название сессии =
- * имя 2ой папки сохранения и чтения.
- * По умолчанию = 'main'.
- *
- * @param string $st_n Название сайта =
- * имя 1ой папки сохранения и чтения сессии.
- * По умолчанию = null задает {@link SessionR::site} = $_SERVER['HTTP_HOST']
- */
- public function run($cs_lt = 2592000, $se_n='main', $st_n = null)
- {
- if(session_status() == PHP_SESSION_ACTIVE)
- session_commit();
- $this->saveParams('old');
- if ($cs_lt == 2592000)
- {}
- elseif ($cs_lt == 0)
- {
- $this->coo_lifetime = $cs_lt;
- $this->sess_lifetime = 1440;
- }
- elseif (is_int($cs_lt) and $cs_lt > 1339)
- {
- $this->coo_lifetime = $cs_lt;
- $this->sess_lifetime = $cs_lt;
- }
- else
- exit ('Допустимый 1ый аргументы в SessionR.run() - число: 0 (кука сессии до закрытия браузера, сессия на сервере гарантировано 24 минуты) / более 1339 секунд (кука сессии от 24 минут, сессия на сервере гарантировано от 24 минут)');
- if ($se_n == 'main')
- {}
- elseif ($se_n != 'main' and
- preg_match('/[\S]/',$se_n) == 1 and
- preg_match('/["?*:><|\/\\\]/',$st_n) == 0)
- {
- $this->sess_name = trim($se_n).'_sessionR';
- }
- else
- exit ('Допустимый 2ой аргумент в SessionR.run() должен иметь хотя бы 1 не пробельный символ, кроме "?*:><|/\\');
- if($st_n == null)
- {
- $this->site = $_SERVER['HTTP_HOST'];
- }
- elseif($st_n != null and
- preg_match('/[\S]/',$st_n)==1 and
- preg_match('/["?*:><|\/\\\]/',$st_n)==0)
- {
- $this->site = trim($st_n);
- }
- else
- exit('Допустимый 3ий аргумент в SessionR.run() должен иметь хотя бы 1 не пробельный символ, кроме "?*:><|/\\');
- $this->setNewParams();
- $this->saveParams('new');
- if(!is_dir($this->sess_new_params['session.save_path']))
- mkdir($this->sess_new_params['session.save_path'], 0777, true);
- session_start();
- $this->active_sessionR = true;
- }
- /**
- * @param string $old_or_new
- * 'old' / 'new' - определяет массив для сохранения параметров сессии.
- *
- * @return void Сохраняет текущие параметры сессии в
- * {@link SessionR::sess_old_params}
- * или в {@link SessionR::sess_new_params}
- */
- private function saveParams($old_or_new)
- {
- if ($old_or_new == 'old')
- $name = 'sess_old_params';
- elseif ($old_or_new == 'new')
- $name = 'sess_new_params';
- else
- exit ("Допустимые аргументы в SessionR.saveParams() > 'old' / 'new'");
- foreach ($this->sess_params as $v)
- {
- $this->{$name}[$v] = ini_get($v);
- }
- }
- /**
- * Назначаем новые параметры сессии.
- * Сборщик мусора с шансом запуска 1 из 1000 раз session_start();
- */
- private function setNewParams()
- {
- ini_set('session.use_cookies', 1);
- ini_set('session.use_only_cookies', 1);
- ini_set('session.use_trans_sid', 0);
- ini_set('session.save_handler', 'files');
- ini_restore('session.save_path');
- ini_set(
- 'session.save_path',
- ini_get('session.save_path').
- $this->site.'/'.$this->sess_name.'/'
- );
- ini_set('session.cookie_lifetime', $this->coo_lifetime);
- ini_set('session.cookie_path', '/');
- ini_set('session.cookie_httponly', 1);
- ini_set('session.gc_maxlifetime', $this->sess_lifetime);
- ini_set('session.gc_probability', 1);
- ini_set('session.gc_divisor', 1000);
- ini_set('session.name', $this->sess_name.'_id');
- }
- /**
- * Завершаем свою сессию, обновляем время жизни куки,
- * возвращаем начальные параметры
- * {@link SessionR::sess_old_params}
- */
- public function end()
- {
- if($this->active_sessionR == true and
- session_status() == PHP_SESSION_ACTIVE)
- {
- session_commit();
- $this->active_sessionR = false;
- if($this->sess_new_params['session.cookie_lifetime'] == 0)
- $time = 0;
- else
- $time = time() + $this->sess_new_params['session.cookie_lifetime'];
- setcookie ($this->sess_new_params['session.name'],
- session_id(), $time);
- foreach ($this->sess_old_params as $k => $v)
- {
- ini_set($k,$v);
- }
- }
- else echo 'Невозможно завершить сессию - нет активной сессии SessionR';
- }
- /**
- * Корректное удаление сессии и куки у клиента,
- * возвращаем начальные параметры
- */
- public function destroy()
- {
- if($this->active_sessionR == true and
- session_status() == PHP_SESSION_ACTIVE)
- {
- session_destroy();
- setcookie($this->sess_new_params['session.name'],'',1);
- $this->active_sessionR = false;
- foreach($this->sess_old_params as $k=>$v)
- {
- ini_set($k,$v);
- }
- }
- else echo 'Невозможно удалить сессию - нет активной сессии SessionR';
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement