Intereting Posts
Получите только пользовательские носители (фотографии) – API Twitter PHP $ _FILES не работает должным образом как расширить модуль авторизации пользователя kohana Сравнение двух строк даты ISO8601 в PHP Является ли синхронизация в Amazon S3 PHP SDK / API действительно синхронизацией? Функция для подсчета числа цифр в строке Должен ли я использовать MVC как на клиенте, так и на сервере? Ошибка SimpleXMLElement, но xml действителен Newbie Проблема с кодировкой PHP: функция заголовка (возможно, мне нужен кто-то, чтобы проверить мой код) Android: запрос строки Volley onresponse не вызывается Как показать pdf-файлы в браузере пользователя, если плагин не установлен PHPMyAdmin / MySql – добавление поля идентификатора и идентификаторов автопопуляции php javascript url encoding Подключитесь к внешнему серверу с помощью phpMyAdmin Codeigniter: Тип файла, который вы пытаетесь загрузить, не разрешен. Вчера все было хорошо

PHP-сессии в базе данных

Как я могу хранить сеансы в базе данных? Я сделал это, используя этот код:

function write ($session_id, $session_data) // write session data to the database. { if (!empty($this->fieldarray)) { if ($this->fieldarray['session_id'] != $session_id) { // user is starting a new session with previous data $this->fieldarray = array(); } // if } // if if (empty($this->fieldarray)) { // create new record $array['session_id'] = $session_id; $array['date_created'] = getTimeStamp(); $array['last_updated'] = getTimeStamp(); $array['session_data'] = addslashes($session_data); $this->_dml_insertRecord($array); } else { // update existing record if (isset($_SESSION['logon_user_id'])) { $array['user_id'] = $_SESSION['logon_user_id']; } // if $array['last_updated'] = getTimeStamp(); $array['session_data'] = addslashes($session_data); $this->_dml_updateRecord($array, $this->fieldarray); } // if return TRUE; } // write 

Но как я должен удалить его автоматически, как раньше. Я имею в виду, как автоматически удалять сеансы после таймаута?

Посмотрите эти хорошие сообщения:

  • Сохранение сеансов в базе данных

  • Сохранение данных сеанса PHP в базе данных

Мне пришлось иметь дело с этим еще некоторое время назад, и есть 2 решения, ни одно из которых не красиво, но вот оно.

  1. В порядке событий (свободно) ваш скрипт будет проверять, есть ли идентификатор сеанса, отправленный на сервер, тогда он увидит, находится ли этот сеанс в вашей базе данных, и если сеанс истек. Как только вы установили соединение с вашим сеансом db, вам может потребоваться запустить запрос DELETE для всех записей с датой истечения срока действия, предшествующей текущей отметке времени. Затем найдите идентификатор, который только что отправил пользователь. Таким образом, очистка выполняется каждый раз, когда люди используют ваш сайт

  2. Следующим способом, который вы можете рассмотреть, помимо прочего, является выполнение задания CHRON или другого автоматизированного сценария, который выполняется так часто, чтобы очищать истекшие записи из вашей таблицы сеансов. Это хороший метод, если ваш сайт получает легкий и нечастый трафик.

Это сочетание методов. Если в вашем скрипте, когда вы проверяете свой сеанс, проверьте дату истечения срока действия, когда данные сеанса найдены. если идентификатор найден, но сеанс истек, удалите сеанс и запустите новый. Если вы сделаете это так, вам не придется столкнуться с слишком большим количеством проблем с конфликтом ID или множеством запросов, замедляющих работу вашего сервера. Вы все равно можете выполнять свою хроновую работу в конце каждого дня, чтобы выполнить полную очистку.

Убедитесь, что в вашей системе есть кнопка выхода из определенного типа, что действие ручного входа в систему приведет к удалению сеанса пользователя.

Взгляните на HTTP_Session2 . Из документов PEAR:

HTTP_Session2 предоставляет дополнительные функции, такие как хранилище базы данных для данных сеанса с использованием пакета DB и MDB2. Он также вводит новые методы, такие как isNew (), useCookies (), setExpire (), setIdle (), isExpired (), isIdled () и другие.

Если вы хотите реализовать свой, посмотрите на код в MDB2.php внутри этого пакета. Он содержит метод сбора мусора (gc), который в сочетании с session_set_save_handler должен делать трюк.

В конце вашего кода session_destroy(); для закрытия сеанса:

 <?php session_destroy(); ?>