Я использую Laravel 5.7. Redis настроен как мой кеш и драйвер сеанса.
В моем контроллере, если я напишу в свой сеанс с помощью $ request-> session () -> put () ИЛИ Session :: put (), он появится, когда я распечатаю свой кеш для идентификатора сеанса:
print_r(unserialize(Cache::get(Session::getId())));
Обратите внимание: моя основная цель при выводе данных сеанса таким образом - получить доступ к сеансам, которые не являются моим активным сеансом.
Однако, если я напишу в свой сеанс, используя любой из этих методов в строке в моем домене, они НЕ будут отображаться в печати кеша, но будут отображаться (вместе со всем остальным, что отображается в печати кеша), если я использовать:
print_r(Session::all());
Я в недоумении относительно того, что происходит. Я подтвердил, что то, что я говорю, верно и при доступе к данным через redis cli. Судя по всему, если я пишу в сессию в домене, она как-то хранится где-то еще? Мысли?






Ваш кеш и ваш сеанс - это две совершенно разные сущности, даже если они могут использовать один и тот же драйвер.
Сеанс используется для поддержания отношений с пользователем. Подробнее см. Документация сеанса PHP.
Кеш - это место, где вы храните и ищите часто используемые данные, вместо того, чтобы обращаться к дорогостоящему коду или базе данных. Он недолговечен, и никогда не гарантируется, что он будет содержать какие-либо данные.
Почему бы вам просто не использовать Session::get('whatever')?
Увидев ваше редактирование:
Note, my primary goal in outputting session data this way is to access sessions that are not my active session.
Вы должны хранить эти данные через более надежный механизм хранения, чем ваш кеш. Как я упоминал ранее, кеш недолговечен. Вы можете использовать redis, поскольку это хранилище ключей и значений, а не настоящий кеш, как memcached. Просто используйте это напрямую как таковое:
Redis::get('user:profile:'.$id);
Что происходит, когда ваш кеш заполнен? Он начинает уничтожать данные. Лучше использовать подходящий инструмент для соответствующей работы.
Даже когда я рассматриваю ваши аргументы, меня все равно раздражает мой вопрос. Почему он будет вести себя по-другому в контроллере и в домене? Думаю, я все равно хотел бы знать в любом случае.
Он не настолько по-разному ведет себя, как вы вызываете другой код. Если вы действительно хотите знать разные пути кода, вам следует использовать xdebug и выполнить пошаговое выполнение приложения.
Все, что вы сказали, правда. Однако аргументация в моем случае связана с отслеживанием сеансов пользователя на нескольких устройствах и предоставлением мне возможности уничтожить их все сразу. Я планирую встроить это в кеш вместо базы данных.