2014-12-25 4 views
1

Я пытаюсь добавить некоторые переменные в сеанс Laravel, просто используя Laravel SessionId. Причина этого заключается в том, что я пытаюсь обновить данные сеанса из удаленного источника (задание очереди) и предоставить клиенту возможность получить эти данные с запросом на получение AJAX. Работа может выполняться в течение нескольких минут или часов, поэтому мне нужен способ для обновления клиента.Добавить в сеанс Laravel по идентификатору сеанса?

Идея заключается в том, что я посылаю Laravel SessionId (через Session::getId()) задание, задание просматривает сеанс через sessionId и динамически подталкивает атрибуты сессии, в то время как клиент долгие опросы через AJAX по маршруту на главной сервер, который возвращает атрибуты, перенесенные в сеанс заданием, а затем удаляет все атрибуты, которые просто были сброшены клиенту.

Я также использую драйвер кластера Redis на Amazon ElastiCache, если это помогает.

Из того, что я видел до сих пор, единственный способ получить доступ к сеансу - использовать фасад Session, который является статическим классом, я в основном ищу что-то вроде $session = SessionAccessor::findSessionById($sessionId) или что-то в этом роде.

Возможно ли это в Ларавеле?

+0

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

+0

Я не использую сырые сессии PHP, хотя; Я использую кластер Redis, безусловно, можно подключиться к Redis и напрямую манипулировать хранимыми данными, однако я пытался выяснить способ сделать это с помощью Laravel Framework. –

ответ

0

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

Что бы я сделал, это сделать таблицу jobs или что-то еще - и иметь идентификатор пользователя и идентификатор задания, наряду с «статусом». Затем задание в очереди просто обновляет таблицу базы данных, когда она будет завершена.

Тем временем ваш опрос AJAX попадает на маршрут, который проверяет БД на наличие последнего статуса.

+0

Отличная идея! Я думаю, что путь, который я пойду, это использовать ключ, например «job: $ userid: messages» в Redis, провести опрос AJAX по маршруту, например/get-status, и вытащить данные прямо из Redis с таким ключом. Я действительно не хочу использовать таблицу базы данных для этого, поскольку Redis будет быстрее, и я действительно не хочу, чтобы для этого была другая таблица. Спасибо, принят! –

Смежные вопросы