Files
ave-cms-alt/class/class.session.memcached.php

87 lines
3.4 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
/**
* AVE.cms
*
* @package AVE.cms
* @version 4.x (PHP 8+ compatible)
* @filesource
* @copyright © 2007-2025 AVE.cms, https://www.ave.gitget.ru
*
* @license GPL v.2
*/
// ИСПРАВЛЕНИЕ #1: Добавлено implements SessionHandlerInterface для совместимости с PHP 8+
class AVE_Session_Memcached implements SessionHandlerInterface
{
private Memcached $memcached;
private int $ttl;
private string $prefix;
function __construct()
{
// Добавим проверку на существование констант, чтобы избежать ошибок.
if (!defined('MEMCACHED_SERVER') || !defined('MEMCACHED_PORT')) {
// В реальной CMS здесь должна быть обработка ошибки, но для примера просто выйдем.
throw new Exception('Memcached configuration constants are missing.');
}
$this->memcached = new Memcached;
$this->memcached->addServer(MEMCACHED_SERVER, MEMCACHED_PORT);
$this->ttl = (defined('SESSION_LIFETIME') && is_numeric(SESSION_LIFETIME))
? (int)SESSION_LIFETIME
: (get_cfg_var("session.gc_maxlifetime") < 1440 ? 1440 : (int)get_cfg_var("session.gc_maxlifetime"));
$this->prefix = 'sess_';
}
// ИСПРАВЛЕНИЕ #2: Убран префикс '_' и добавлены типы
public function open(string $path, string $name): bool
{
return true;
}
// ИСПРАВЛЕНИЕ #2: Убран префикс '_' и добавлены типы
public function close(): bool
{
return true;
}
// ИСПРАВЛЕНИЕ #2: Убран префикс '_' и добавлены типы
public function read(string $id): string
{
// Memcached::get возвращает false при промахе, поэтому используем ?: ''
// для соответствия требованию read() всегда возвращать строку (string)
$data = $this->memcached->get($this->prefix . $id);
return $data !== false ? $data : '';
}
// ИСПРАВЛЕНИЕ #2: Убран префикс '_' и добавлены типы
public function write (string $id, string $data): bool
{
// Время жизни (TTL) передается в виде абсолютной UNIX метки времени
// или в секундах, если оно меньше 30 дней.
return $this->memcached->set($this->prefix . $id, $data, time() + $this->ttl);
}
// ИСПРАВЛЕНИЕ #2: Убран префикс '_' и добавлены типы
public function destroy (string $id): bool
{
// delete() возвращает true/false/int
$result = $this->memcached->delete($this->prefix . $id);
// Возвращаем булево значение (true, если запись была удалена или отсутствовала,
// но не было критической ошибки)
return $result !== false;
}
// ИСПРАВЛЕНИЕ #2 и #3: Убран префикс '_' и изменен возвращаемый тип на int|false
public function gc (int $maxlifetime): int|false
{
// Memcached автоматически управляет очисткой на основе TTL.
// Мы просто возвращаем 0 удаленных записей, чтобы соответствовать интерфейсу.
return 0;
}
}
?>