Что лучше: проверить базу данных или просто проверить сеанс на каждой странице, используя PHP - PullRequest
2 голосов
/ 25 марта 2012

Я разработал множество систем входа на PHP.По сути, для каждого веб-сайта или приложения, которое я создал, у него была схема входа в систему для создания статей, загрузки изображений, редактирования комментариев и тому подобного.

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

В то время я просто проверял сеанс на каждой странице, например:

<?php
if($_SESSION['loggedin'] === true)
{
    // Keep that page
}
else
{
    // redirect to login page   
}
?>

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

Итак, каков наиболее распространенный и лучший способ обработки сеансов на каждой странице: проверять базу данных каждый раз или просто проверять, является ли сеанс истинным?

Ответы [ 3 ]

4 голосов
/ 25 марта 2012

Я не знаю, как лучше, но я делаю что-то вроде этого:

У меня есть таблица sql с сессиями (например, userid, sessionid, expiredate, ...).

Идентификатор сессии "сохраняется" в $ _SESSION ['cms_session'].

Если идентификатор сеанса, который находится в $ _SESSION ['cms_session'], не существует в таблице сеансов, пользователь больше не входит в систему.

Для удаления старых сессий в таблице я использую кроны.

1 голос
/ 25 марта 2012

То, что вы пытаетесь сделать, - это иметь единственное место, где вы можете поддерживать статус пользователя и знать, что изменение будет отражено немедленно.

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

0 голосов
/ 25 марта 2012

Проверка базы данных при каждой загрузке страницы действительно неэффективна.Если все, что вы пытаетесь сделать, это уничтожить его сеанс, вы должны хранить сеансы в memcached, где «ключ» основан на имени пользователя, что-то вроде «johnsmith-session», а затем на странице администратора отправить сообщение в memcached дляубить этот ключ, который должен немедленно выйти из вашего сайта.

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

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

...