TGViewer
PHP | Вопросы собесов PHP | Вопросы собесов @easy_php_ru · 2.3K subscribers
Post #1815 563
🤔 Как сделать так, чтобы сессии не хранились в файле?

Для хранения сессий не в файлах в PHP, можно использовать другие механизмы хранения, такие как базы данных, кэш-сервисы (например, Redis или Memcached) или специализированные хранилища.

🚩Хранение сессий в базе данных

1⃣Создайте таблицу для хранения сессий:
CREATE TABLE sessions (
id VARCHAR(255) PRIMARY KEY,
data TEXT,
last_access TIMESTAMP
);


2⃣Создайте обработчики сессий:
Создайте класс для обработки сессий, реализующий интерфейс SessionHandlerInterface.
class DBSessionHandler implements SessionHandlerInterface {
private $pdo;

public function __construct(PDO $pdo) {
$this->pdo = $pdo;
}

public function open($savePath, $sessionName) {
return true;
}

public function close() {
return true;
}

public function read($id) {
$stmt = $this->pdo->prepare("SELECT data FROM sessions WHERE id = :id");
$stmt->bindParam(':id', $id);
$stmt->execute();
$session = $stmt->fetch(PDO::FETCH_ASSOC);
return $session ? $session['data'] : '';
}

public function write($id, $data) {
$stmt = $this->pdo->prepare("REPLACE INTO sessions (id, data, last_access) VALUES (:id, :data, NOW())");
$stmt->bindParam(':id', $id);
$stmt->bindParam(':data', $data);
return $stmt->execute();
}

public function destroy($id) {
$stmt = $this->pdo->prepare("DELETE FROM sessions WHERE id = :id");
$stmt->bindParam(':id', $id);
return $stmt->execute();
}

public function gc($maxlifetime) {
$stmt = $this->pdo->prepare("DELETE FROM sessions WHERE last_access < NOW() - INTERVAL :maxlifetime SECOND");
$stmt->bindParam(':maxlifetime', $maxlifetime, PDO::PARAM_INT);
return $stmt->execute();
}
}


3⃣Инициализация сессий:
$pdo = new PDO('mysql:host=localhost;dbname=testdb', 'username', 'password');
$handler = new DBSessionHandler($pdo);
session_set_save_handler($handler, true);
session_start();


🚩Хранение сессий в Redis

1⃣Установите расширение `phpredis`Для Ubuntu:
sudo apt-get install php-redis


2⃣Используйте Redis для хранения сессий:
Настройте PHP для использования Redis в качестве хранилища сессий, добавив настройки в файл php.ini или в коде.
session.save_handler = redis
session.save_path = "tcp://127.0.0.1:6379"


Ставь 👍 и забирай 📚 Базу знаний
More from @easy_php_ru
  1. Oct 18, 2026🤔 Какой синтаксис у заголовков? Заголовки в языках и разметки часто используются для указ…
  2. Oct 17, 2026🤔 Что такое шифрование? Это процесс преобразования данных в защищённый формат (шифртекст)…
  3. Oct 17, 2026🤔 Зачем использовать Rest , если есть Soup? SOAP (Simple Object Access Protocol) и REST (…
  4. Oct 16, 2026🤔 Какие типы БД бывают? Базы данных делятся на реляционные (SQL) и нереляционные (NoSQL).…
  5. Oct 16, 2026🤔 Что такое агрегат? Агрегат – это термин, часто используемый в области баз данных и прог…
  6. Oct 15, 2026🤔 Что такое замыкание? Это функция, которая «захватывает» переменные из внешней области в…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →