Я использую Laravel 4 для создания своего одностраничного приложения, и мне нужно реализовать тайм-аут сеанса для перенаправления пользователя, как только он будет обнаружен, я пытался проверить $ _SESSION / Session :: exist ( ) через некоторые запросы на опрос, но каждый раз, когда я выбираю маршрут, сессия обновляется.
Как эффективно реализовать опрос для информации о сеансе в Laravel? Нужно ли делать что-то более сложное, например, поддерживать открытое соединение (Websockets / Long pooling)?
Я чувствую, что это должна быть встроенная функция, но, как ни странно, никто, кажется, не реализует ее, потому что большинство реализаций являются постраничными, а не одностраничными + ajax?
Это забавная проблема, и вы должны использовать промежуточное программное обеспечение для этого. Если вы используете Laravel 4.1 или выше, Laravel использует StackPHP
Проверь это ссылка на сайт от fideloper, это может быть полезно.
Просто установите / обновите переменную сеанса (определенную вами) в промежуточном программном обеспечении и создайте маршрут, который не использует промежуточное программное обеспечение в вашем API для запроса этой переменной.
Насколько я знаю, его нет в Laravel из коробки, но на самом деле его легко реализовать. Просто пример: вы можете сохранить время входа пользователя в переменную сеанса с помощью Session::put('logintime', time());
и затем проверьте, был ли тайм-аут.
Пример (с 15-минутным таймаутом):
function isTimeout() {
return !Session::has('logintime') || Session::get('logintime') + (15 * 60) <= time();
}
Затем вы можете использовать его в ответ на запрос AJAX, как вам нужно.
Для некоторых это может быть далеко, из-за границ знаний, но я делаю это ниже для отображения данных в реальном времени в моих приложениях, и это стоит усилий, чтобы начать работу с NodeJS (и это проще, чем думают люди, поскольку разработчики PHP с полным стеком уже знакомы с JS, очень рекомендую заходить в MEAN стек)
Я пишу основные функции в среде PHP и для всего, что мне нужно для отображения или взаимодействия с пользователем в режиме реального времени, вместо опроса или использования php с веб-сокетами, я ввожу дополнительный сервер nginx для nodejs и обслуживаю данные с помощью socket.io , что хорошо, потому что он сводит к минимуму количество подключений к вашей базе данных (то есть позволяет избежать проблем с максимальным количеством подключений в Mysql) и является супермасштабируемым, поскольку вместо опроса он использует наблюдаемый шаблон, сохраняя все клиентские подключения в массиве и выдвигая новый данные, когда наблюдатель видит изменения в вашем уровне сохраняемости данных, вместо того, чтобы заставлять ваш сервер быть очень занятым с помощью миллиардов недовольных клиентов, которые постоянно опрашивают вашу базу данных.
Если вы этого не сделали, я также рекомендую сбросить apache для ваших серверов приложений PHP и заглянуть в Nginx с помощью php fpm.