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