Новое в Laravel и некоторые проблемы с сеансами. В частности, чтение данных сеанса из файла PHP за пределами Laravel.
Например, допустим, что я устанавливаю переменную сеанса следующим образом: Session::put('isAuthorized', 'yes')
Я могу получить это просто отлично в контексте Laravel с помощью Session::get('isAuthorized')
но следующее PHP не будет извлекать этот ключ сеанса –
<?php session_start(); echo $_SESSION['isAuthorized']; ?>
возвращается
Notice: Undefined index: isAuthorized in C:\xampp\htdocs\session.php on line 3
Я попытался установить драйвер сеанса Laravel как cookie
file
cookie
и для file
, и того же результата.
Обратите внимание, что этот ответ относится к Laravel 3
Laravel не использует сеансы PHP, поэтому забудьте session_start()
, $_SESSION
и т. Д.
Если вы работаете с драйвером сеанса файлов, данные сеанса хранятся в файле в хранилище / сеансах. Вы можете получить имя файла, прочитав идентификатор сеанса Laravel из файла cookie. Таким образом, хакерский способ решить вашу проблему состоял бы в написании кода, который получает идентификатор сеанса из файла cookie, а затем ищет файл с этим именем в папке хранения / сеансов, читает этот файл в json_decode()
и вы можете прочитайте все это.
Если вы используете драйвер сеанса cookie, все данные сеанса хранятся в файле cookie, но он зашифрован, поэтому вам придется иметь копию ключа (который должен находиться в приложении / config / application.php ), а затем выяснить, какой метод шифрования используется Laravel, чтобы вы могли его расшифровать. Затем вы можете прочитать все переменные сеанса.
Чтобы достичь того, чего вы надеетесь достичь, то есть выяснить, разрешено ли текущее лицо, может быть лучше создать API в ваше приложение и защитить его, чтобы он мог получить доступ только с помощью localhost. Не отличное решение с точки зрения производительности, но потенциально более элегантное, потому что вы не взламываете внутреннюю часть управления сеансами Laravel.
Вы также можете написать адаптеру сеанса, поэтому переменная $_SESSION
будет его экземпляром:
<?php class SessionAdapter implements \ArrayAccess { public function offsetExists($offset) { return Session::has($offset); } public function offsetGet($offset) { return Session::get($offset); } public function offsetSet($offset, $value) { return Session::put($offset, $value); } public function offsetUnset($offset) { return Session::forget($offset); } }
А потом где-то в вашем коде:
<?php $_SESSION = new SessionAdapter(); // or $GLOBALS['_SESSION'] = new SessionAdapter();
Таким образом, родная сессия PHP и сеанс Laravel будут «одинаковыми».
Laravel использует драйверы хранения для своих сеансов, а именно файлы cookie, файл, базу данных, память, memcached и redis (и APC в Laravel 4).
Веб – это среда без гражданства. Это означает, что каждый запрос к вашей заявке считается несвязанным с любым предыдущим запросом. Однако сеансы позволяют хранить произвольные данные для каждого посетителя в вашем приложении. Данные сеанса для каждого посетителя хранятся на вашем веб-сервере, а файл cookie, содержащий идентификатор сеанса, хранится на машине посетителя. Этот файл cookie позволяет вашему приложению «запомнить» сеанс для этого пользователя и получать данные сеанса при последующих запросах к вашему приложению.
http://laravel.com/docs/session/config
Драйвер хранилища по умолчанию – Cookie, поэтому попробуйте следующее:
print_r($_COOKIE);
Обработка сеанса в Laravel действительно отличается от собственной PHP-сессии. Чтобы использовать собственную сессию PHP, установите значение, как показано ниже:
<?php session_start(); $_SESSION['isAuthorized'] = 'yes'; echo $_SESSION['isAuthorized']; // output yes ?>