Сессия в Laravel доступна только в местном классе - PullRequest
0 голосов
/ 10 октября 2019

В настоящее время я создаю API с помощью laravel. Столкнувшись с аутентификацией, я ее реализовал. В моем контроллере аутентификации я установил Сеанс: Session::put('value1','value2');. При попытке получить доступ к этому сеансу из моего класса промежуточного программного обеспечения Session::get('value1') он возвращает мне значение null в качестве возврата. Как я могу сделать "session_start ()" в laravel?

Ответы [ 2 ]

1 голос
/ 10 октября 2019

PHP (и Laravel имеет последствия) связывают сеанс с браузером через определенный Cookie, который устанавливается в браузере. В Laravel cookie называется laravel_session, тогда как PHP обычно называет его PHPSESSID. Это работает, потому что браузер будет автоматически отправлять cookie-файлы при каждом запросе на сервер, позволяя вашему приложению laravel соответствовать данным сеанса cookie <-> и позволяя вам успешно вызывать Session::get('value1')

Теперь выне используя браузер. Вы делаете запросы к API, поэтому нет ничего, что автоматически управляет куки-файлами сеанса.

Есть несколько хаков, которые вы могли бы сделать, чтобы заставить его работать (например, вручную управляете куки-файлами в ваших запросах API), но вы действительно не должны этого делать. сделайте это: это антипаттерн, и это создаст много проблем.

0 голосов
/ 10 октября 2019

ЭТО НЕ РЕКОМЕНДУЕТСЯ

Но чтобы ответить на ваш вопрос ...

Вам необходимо применить промежуточное ПО StartSession к группе маршрутов API

в App \ Http \ Kernel

'api' => [
    \Illuminate\Session\Middleware\StartSession::class,
    'throttle:60,1',
    'bindings',
],

Теперь, например, в routes/api.php

Route::get('test', function () {
    session(['bla' => 'foo']);
    dd(session('bla'));
});

Доступ к /api/test возвращает

"foo"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...