каков наилучший способ обработки запросов к базе данных перед загрузкой любой страницы?

#php #laravel #laravel-4

#php #laravel #laravel-4

Вопрос:

Я использую фреймворк laravel 4, хотя я открыт для выполнения этого не-laravel способом, если потребуется. Зарегистрированные пользователи хранятся в базе данных ‘active_users’, если их запись удалена из этой базы данных, я хочу вызвать Auth::logout() . Каков наилучший способ сделать это?

Вот варианты, которые я рассмотрел:
1. Как событие (не уверен, как это сделать)
2. Использование AJAX для опроса скрипта, который запрашивает БД
3. Использование фильтра (до).
4. Использование сеансов на основе таблиц <= Это кажется привлекательным вариантом.

Если есть лучший другой способ сделать это, пожалуйста, дайте мне знать, спасибо.

Комментарии:

1. Почему вы хотите это сделать? Зачем их удалять? Гораздо больше смысла было бы иметь столбец, идентифицированный как активный или что-то в этом роде, пользователи должны в конечном итоге войти в систему, а затем сохранить их в сеансе. Если они не активны, вы не сохраняете их в сеансе. Нет смысла проверять, существуют ли они каждый раз, когда они обновляют страницу, перегрузка вообще не практична. Вероятно ли, что они войдут в систему и станут неактивными до истечения срока действия их сеанса?

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

3. вы хотите выйти из системы, если они находятся в процессе выполнения чего-либо (скажем, чтения страницы?) Или при следующем запросе? или оба? Если оба делают что-то, что проверяет их статус входа в систему, вызовите действие before , а также настройте таймер, который запускает событие ajax для проверки их статуса и, возможно, выхода из системы.

Ответ №1:

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

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

В противном случае просто создайте функцию, которая возвращает bool значение true , если пользователь существует false . Если функция возвращает false, вы просто уничтожаете сеанс пользователя с помощью чего-то вроде session_destroy() .

Функция может либо подсчитывать количество строк, полученных при выборе SELECT строк, соответствующих текущему пользователю, если она возвращает 0, то вы знаете, что строка была удалена (или она никогда не существовала вообще, это не имеет значения). Было бы разумнее добавить active столбец в строку, который вы можете обновить до 0 вместо 1, если хотите деактивировать пользователя, таким образом, история сохраняется. Итак, вы должны выбрать, ГДЕ пользователь активен, т. Е. 1, (0 строк возвращаются, если оно было изменено на 0).

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

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

Редактировать

Неважно, какой фреймворк вы используете, но хорошо, вы используете Laravel. Я знаю, что вы можете использовать Auth::logout() функцию, тогда используйте ее! 🙂

 function userIsActive(){...}
$active = userIsActive();
if(!$active)
{
    Auth::logout();
}
 

Никакой AJAX не требуется, ЕСЛИ вы не хотите выполнять действия JavaScript, если пользователи могут выполнять действия JavaScript, для которых требуются разрешения для входа в систему, ТОГДА и ТОЛЬКО тогда вам нужно использовать AJAX, чтобы проверить, активны ли они все еще.

Использование только AJAX не подходит, если это вопрос безопасности и аутентификации, если пользователь отключил JavaScript (или отключил его по какой-то причине, возможно, неизвестной пользователю), тогда вы в значительной степени… Я не собираюсь заканчивать это предложение 🙂

Комментарии:

1. Спасибо за ваш ответ. По сути, вы рекомендуете способ AJAX, хорошо, для этого уже написали скрипт, но я хочу знать, есть ли лучшие способы, согласно моему вопросу, я должен отредактировать его, чтобы сказать, что я использую laravel, фреймворк, это может позволить другое, возможно, лучшее решение.

2. Не совсем в общем, но да, если выполнение на стороне клиента также должно быть проверено, пожалуйста, проверьте мое второе редактирование.

3. Я полностью понимаю. У моего работодателя (я на стажировке) иногда возникают необоснованные требования, насколько я знаю, никаких действий с javascript не требуется, возможно, в будущем, но не сейчас. Он сказал, что хочет, чтобы пользователь почти сразу узнал, что он вышел из системы, теперь, насколько я знаю, для этого потребуется опрос с помощью AJAX; Но, скажем, я не использую ajax, мне трудно решить, куда поместить эти проверки.

4. Если я не использую AJAX, перед загрузкой каждой страницы? хорошо, но как что? механизм, основанный на четности, где-то в фильтре маршрутов? как вызов функции, который возвращает bool в условие if на каждом маршруте?. Забавно то, что я не уверен, действительно ли эта функциональность требуется проекту или нет.

5. Если это то, что вы хотите, то да, вы должны проверять это на каждом маршруте (конечно, вызывая уникальную функцию handleUserSession() или что-то в этом роде, чтобы избежать дублирования кода. Я использовал маршруты в nodejs, там я просто проверил, вошел ли пользователь в систему, затем отобразил текущее представление, в противном случае отобразил домашнюю страницу (вы даже можете сохранить сообщение в сеансе и повторить сеанс на странице homa, что-то вроде «Извините, но вы вышли из системы».). Делайте то, что работает для вас и просто, вы могли бы уже решать другие проблемы 🙂