php, как определить идентификатор сеанса мертв или жив?

Возможный дубликат:
Как мне закончить сеанс PHP через 30 минут?

Как определить идентификатор сеанса мертв или жив? Предположим, что кто-то вошел в систему – создается новый сеанс, и я сохраняю идентификатор сеанса. Если он войдет в другой браузер, я могу определить, что он запишется дважды. Но как определить, выходит ли он?

Что вам нужно будет сделать, так это когда он войдет в свою учетную запись в новом браузере, найдите старый идентификатор сеанса, связанный с его учетной записью, и истечет его. Когда он нажимает кнопку выхода из системы, вы можете удалить этот идентификатор сеанса.

РЕДАКТИРОВАТЬ:

Извините, я прочитал ваш вопрос неправильно. То, что вы хотите сделать, – установить тайм-аут сеанса, поэтому, если тайм-аут достигнут, вы предполагаете, что сеанс мертв и истекает. При каждом запросе на страницу вы продлеваете срок действия, чтобы он был в реальном времени. Если они войдут в другой браузер, вы можете предположить, что сеанс в старом браузере старый, и он истекает сразу с места в карьер или истекает с таймаутом.

Затем вы можете проверить тайм-ауты сеанса при загрузке страницы или запустить cron-скрипт, который будет запускаться через базу данных сеанса и истекает все старые сеансы.

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

Если пользователь выйдет из системы, вы должны использовать session_destroy() для завершения сеанса.

Таким образом, переменная будет уничтожена, поэтому, если вы проверите переменные сеанса, это будет неверно. Я лично использую $_SESSION['isLoggedIn'] = TRUE .

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

Используйте $ _SESSION [], когда пользователь входит в систему и устанавливает переменную как истину. Вы также можете сохранить некоторые данные в переменной сеанса. Как только пользователь нажимает на выход, значение сеанса должно быть ложным. Код может быть следующим:

  function Login() { if(!isset($_SESSION)){ session_start(); } if(!$this->CheckLoginInDB($email,$password)) { return false; } $_SESSION[$this->GetLoginSessionVar()] = $email; return true; } function GetLoginSessionVar() { $retvar = md5($this->rand_key); $retvar = 'usr_'.substr($retvar,0,10); return $retvar; } function LogOut() { session_start(); $sessionvar = $this->GetLoginSessionVar(); $_SESSION[$sessionvar]=NULL; unset($_SESSION[$sessionvar]); } с  function Login() { if(!isset($_SESSION)){ session_start(); } if(!$this->CheckLoginInDB($email,$password)) { return false; } $_SESSION[$this->GetLoginSessionVar()] = $email; return true; } function GetLoginSessionVar() { $retvar = md5($this->rand_key); $retvar = 'usr_'.substr($retvar,0,10); return $retvar; } function LogOut() { session_start(); $sessionvar = $this->GetLoginSessionVar(); $_SESSION[$sessionvar]=NULL; unset($_SESSION[$sessionvar]); } 

Это простой способ сделать это. Если вам нужен тайм-аут. Вы можете использовать начальное время для переменной $ _SESSION [], а затем установить время ожидания. Проверяйте активность до этого времени, а затем выходите так:

 function LogOut(){ session_start(); // set timeout period. This will be in seconds. $inactive = 1000; // check to see if $_SESSION['timeout'] is set if(isset($_SESSION['timeout']) ) { $session_life = time() - $_SESSION['start']; if($session_life > $inactive) { session_destroy(); header("Location: logoutpage.php"); } } $_SESSION['timeout'] = time(); } 

Там могут быть более эффективные способы сделать это. Я ищу лучший способ сделать это сам. Надеюсь, поможет.

Поэтому, если он закрывает свой браузер, он все равно выйдет из системы после бездействия. Но если вы хотите выйти из системы после закрытия браузера, проверьте ini.session.cookie-lifetime

Вообще говоря, действие «входа в систему» ​​обычно связано с каким-то уровнем стойкости , обычно это таблица пользователя / коллекция на сервере базы данных.

Сеансы создаются с использованием этих сохраненных данных во время входа в систему, а сохраненные данные каким-то образом сериализуются в супергелобале $_SESSION .

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

Там нет жесткого и быстрого правила, что это должно быть проведено в БД, оно просто масштабируется лучше. Для небольшого или тестового примера вы можете просто сохранить файлы подкачки.

Основная идея заключается в том, что для того, чтобы иметь какие-либо данные, которые выходят за пределы срока действия cookie session_id который ссылается на сеанс на сервере, вам необходимо реализовать некоторую форму постоянной.

Для этого вам нужно будет войти в вашу пользовательскую таблицу или переключиться на сохранение сеанса в БД, тогда вы можете проверять сеансы против пользователей (если вы настроите их таким образом).