Класс обертка для работы с сессиями в PHP
Как известно PHP имеет встроенную подержку сессий, с помощью которых, можно например, хранить некоторые данные пользователя не в браузера, а на сервере. В браузере будет храниться только идентификатор сессии, как правило в cookies.
В данной статье я покажу Вам, как обернуть встроенные в PHP сессии в объектно-ориентированную обертку, для того, чтобы облегчить работу с ними.
Код далее:
<?php
// класс сессии
class Session
{
private $cookieTime;
// задаем время жизни сессионных кук
public function __construct(string $cookieTime = '+30 days') {
$this->cookieTime = strtotime($cookieTime);
session_cache_limiter(false);
}
// стартуем сессию
public function start()
{
session_start();
}
/**
* Проверяем сессию на наличие в ней переменной c заданным именем
*/
public function has($name)
{
return isset($_SESSION[$name]);
}
/**
* Устанавливаем сессию с именем $name и значением $value
*
*
* @param $name
* @param $value
*/
public function set($name, $value) {
$_SESSION[$name] = $value;
}
/**
* Когда мы хотим сохранить в сессии сразу много значений - используем массив
*
* @param $vars
*/
public function setArray(array $vars)
{
foreach($vars as $name => $value) {
$this->set($name, $value);
}
}
/**
* Получаем значение сессий
*
* @param $name
* @return mixed
*/
public function get($name) {
if (isset($_SESSION[$name])) {
return $_SESSION[$name];
}
return $_SESSION[$name];
}
/**
* @param $name - Уничтожаем сессию с именем $name
*/
public function destroy($name) {
unset($_SESSION[$name]);
}
/**
* Полностью очищаем все данные пользователя
*/
public function destroyAll() {
session_destroy();
}
/**
* Устанавливаем куки
*
* @param $name
* @param $value
*/
public function setCookie($name, $value) {
setcookie($name, $value, $this->cookieTime);
}
/**
* Получаем куки
*
* @param $name
* @return mixed
*/
public function getCookie($name) {
return $_COOKIE[$name];
}
/**
* @param $name Удалаяем
*/
public function removeCookie($name) {
setcookie($name, null);
}
}
Как пользоваться? Пример далее:
$session = new Session();
$session->start();
if( !$session->has('counter') ) {
$session->set('counter', 0);
}
$counter = $session->get('counter');
$session->set('counter', ++$counter);
$response->getBody()->write("Вы посетили сайт $counter раз/a");
// массовая устанвока значений
$session->setArray([
'one' => 1,
'two' => 2,
'three' => 3
]);
Вот так можно обернуть встроенный в PHP механизм сессий в ОО класс.
-
- Михаил Русаков
Комментарии (2):
В чем смысл такого написания метода ? /** * Получаем значение сессий * * @param $name * @return mixed */ public function get($name) { if (isset($_SESSION[$name])) { return $_SESSION[$name]; } return $_SESSION[$name]; } Насколько я понимаю, это эквивалентно следующему способу, так как условие не играет никакой роли: public function get($name) { return $_SESSION[$name]; }
Ответить
Да, Вы правы.
Ответить
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.