Я работаю над проектом laravel, который должен работать помимо настраиваемого проекта php, потому что мне нужно получить доступ к чистым php-глобальным значениям $ _SESSION и $ _COOKIE в приложении laravel.
До сих пор я получаю просто пустоту или пустоту. Кто-нибудь знает, как это сделать?
У Laravel есть собственные реализации $_SESSION
и $_COOKIE
, поэтому я боюсь, что вы не сможете получить к ним доступ через эти суперглобалы.
Чтобы попытаться преодолеть это, что вы можете сделать в своем приложении Laravel, это передача данных от одного к другому, делая что-то вроде:
foreach(Session::all() $key => $value) { $_SESSION[$key] = $value; }
У меня была аналогичная проблема с CakePHP пару месяцев назад. В основном, переменные сеанса в приложении Cake полностью не зависели от переменных сеанса в прикладном приложении, которое у нас было. Проблема заключалась в том, что Cake использует другой идентификатор сеанса, чем PHPSESSID. В конце концов, я был вынужден преодолеть разрыв, заставив Cake использовать PHPSESSID. Я не слишком хорошо знаком с Laravel, но из того, что я вижу (на их основном сайте), они, похоже, используют «laravel_session» вместо PHPSESSID. Это, скорее всего, ваша проблема, и, похоже, об этом говорится на официальных форумах Laravel.
Ответ на сеансы настолько прост, что я не верю в начале, что он действительно сработает.
Я думал, что Laravel каким-то образом переопределяет поведение стандартных PHP-сессий по умолчанию. Может быть, объявление пользовательского session_handler
или какой-либо другой магии за кулисами.
Спасибо за все ответы, которые я получил здесь, я обнаружил, что Laravel фактически не использует $ _SESSION, он реализует совершенно другой драйвер.
Таким образом, чтобы иметь доступ к внешнему сеансу, я просто использую собственные session_start()
и session_name()
в чистом PHP, и теперь у меня есть доступ ко всем данным, хранящимся в глобальной $_SESSION
в том же пространстве имен, которое используется в побочном проекте.
Для файлов cookie я еще не могу понять, как это сделать, из приложения Laravel: /. Но только с сессиями я могу продолжить и объединить приложения.
У Laravel есть своя реализация этих глобалов, но вы можете получить к ним доступ через класс запроса Symfony, который является родителем запроса Laravel. Symfony работает напрямую с глобальными.
сессия:
Request::getSession();
Cookie:
$cookie = new ParameterBag($cookie_name);
У меня была аналогичная проблема с файлами cookie, которые не были заданы laravel, а Cookie :: get () возвращен null. Это потому, что laravel шифрует свои файлы cookie. Вы можете просто не включать промежуточное программное обеспечение EncryptCookies
чтобы избежать этой проблемы. Удалить \App\Http\Middleware\EncryptCookies::class
из $middlewareGroups
в app\Http\Kernel.php