php - found - Mi Laravel 5.2.10 Sesiones no persistirĂ¡n
session store not set on request. (1)
Tengo una nueva instalación de Laravel 5, de hecho, he probado esto en múltiples versiones y sigo teniendo el mismo problema.
No cambié nada de lo predeterminado, excepto configurar el controlador de sesión en redis. (Archivo basado también tiene el mismo problema).
Tengo dos rutas establecidas de la siguiente manera
Route::get(''/set/{value}'', function($value) {
var_dump(Session::getId());
Session::set(''test'', $value);
return view(''welcome'');
});
Route::get(''/get'', function() {
return ''Get '' . Session::get(''test'');
});
Si visito el url / set / abc, veo que la sesión aparece en REDIS (también veo el archivo creado cuando uso el archivo). La sesión se ve bien en REDIS como se muestra a continuación
127.0.0.1:6379> KEYS *
1) "laravel:1a3ae6caff6346e4a173fdc1ab4c6eb0f138806b"
2) "laravel:fed1af2fb44c6e625953237c3fa6fcbb05366a5c"
3) "laravel:cb37286ccfe3e7caa20557aca840f50cb5a5f20d"
Cada vez que visito la página, recrea una nueva sesión.
Las partes clave del archivo session.php son las siguientes:
''lifetime'' => 120,
''expire_on_close'' => false,
También he comprobado en REDIS el TTL de las variables de sesión y se inicializan a los 120 minutos (equivalentes en segundos).
¿Alguna idea de lo que estoy haciendo mal?
Merece la pena señalar que estoy usando una vides homestead (completamente disponible) para probar esto. También intenté usar múltiples navegadores. Nunca se envían cookies al navegador, supongo que se debe enviar una identificación de sesión al navegador como parte de la solicitud de obtención inicial.
La clase middleware de Laravel /Illuminate/Session/Middleware/StartSession
es responsable de comenzar su sesión. Antes de L5.2, esto se ejecutaba en cada solicitud porque era parte de la pila de middleware global. Ahora, es opcional porque L5.2 quiere permitir tanto una interfaz de usuario web como una API dentro de la misma aplicación.
Si abre la app/Http/Kernel.php
, verá que el middleware StartSession
es parte de un grupo de middleware llamado web
. Debes poner todas tus rutas allí para que tu ejemplo funcione.
Route::group([''middleware'' => [''web'']], function () {
Route::get(''/set/{value}'', function($value) {
var_dump(Session::getId());
Session::set(''test'', $value);
return view(''welcome'');
});
Route::get(''/get'', function() {
return ''Get '' . Session::get(''test'');
});
});
Puede ver que el grupo de middleware web
también es responsable de otras cosas como proporcionar la variable $errors
en todas las vistas.
Puede leer más sobre esto en los documentos:
De forma predeterminada, el archivo
routes.php
contiene una ruta única, así como un grupo de ruta que aplica el grupo de middlewareweb
a todas las rutas que contiene. Este grupo de middleware proporciona protección de estado de sesión y CSRF a las rutas.Las rutas que no se encuentren dentro del grupo de middleware
web
no tendrán acceso a las sesiones ni a la protección CSRF, por lo tanto, asegúrese de que las rutas que necesitan estas funciones se coloquen dentro del grupo. Normalmente, colocará la mayoría de sus rutas dentro de este grupo: