Как я могу хранить сеансы в базе данных? Я сделал это, используя этот код:
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 решения, ни одно из которых не красиво, но вот оно.
В порядке событий (свободно) ваш скрипт будет проверять, есть ли идентификатор сеанса, отправленный на сервер, тогда он увидит, находится ли этот сеанс в вашей базе данных, и если сеанс истек. Как только вы установили соединение с вашим сеансом db, вам может потребоваться запустить запрос DELETE для всех записей с датой истечения срока действия, предшествующей текущей отметке времени. Затем найдите идентификатор, который только что отправил пользователь. Таким образом, очистка выполняется каждый раз, когда люди используют ваш сайт
Следующим способом, который вы можете рассмотреть, помимо прочего, является выполнение задания 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(); ?>