会话未持续 Laravel 5.4
Session not persist on Laravel 5.4
我在使用 Laravel 会话时遇到了一些问题,现在我在 Laravel 5.4 下工作,所以,我将此代码用于设置会话:
$request->session()->put('usuario', 'somevalue');
但是当我尝试使用以下代码从同一控制器上的另一个函数获取会话值时:
$request->session()->get('usuario');
我得到 NULL,我正在尝试导入 Session 并使用 "web" 中间件
use Illuminate\Support\Facades\Session;
但我仍然遇到同样的错误。
路线:
Route::group(['middleware' => 'web'], function () {
Route::post('login','UsuarioController@login');
Route::get('usuariodatos','UsuarioController@getDatos');
});
控制器,函数登录:
$data=$request->json()->all();
$user=Usuario::where('correo_electronico', $data['login_correo'])->first();
if(!empty($user->id_usuario)) {
if(Hash::check( $data['login_passwd'], $user->passwd) == true) {
$request->session()->put('usuario', $user);
$ses = $request->session()->get('usuario');
return json_encode(array("resultado" => $ses));
} else {
}
} else {
}
控制器函数获取会话:
public function getDatos(Request $request)
{
return json_encode(array("resultado"=>$request->session()->get('usuario')));
}
谁能帮帮我?
谢谢
您需要添加:
$request->session()->save();
放置后会话将不会持续。
奇怪的是,即使在官方文档中也不存在这个重要的细节。
只需删除 web
中间件。由于 Laravel 5.3 它默认应用于所有路由。如果您手动应用它,那么会话逻辑会执行两次并且会中断。
关于 session()->save()
的注释:
如果您要返回 Laravel 响应(即 view()
、response()
等),则无需调用此方法。 Laravel 将在返回响应之前调用它。同样,如果您两次调用此方法,您可能会丢失会话中的任何闪存数据...
我在使用 Laravel 会话时遇到了一些问题,现在我在 Laravel 5.4 下工作,所以,我将此代码用于设置会话:
$request->session()->put('usuario', 'somevalue');
但是当我尝试使用以下代码从同一控制器上的另一个函数获取会话值时:
$request->session()->get('usuario');
我得到 NULL,我正在尝试导入 Session 并使用 "web" 中间件
use Illuminate\Support\Facades\Session;
但我仍然遇到同样的错误。
路线:
Route::group(['middleware' => 'web'], function () {
Route::post('login','UsuarioController@login');
Route::get('usuariodatos','UsuarioController@getDatos');
});
控制器,函数登录:
$data=$request->json()->all();
$user=Usuario::where('correo_electronico', $data['login_correo'])->first();
if(!empty($user->id_usuario)) {
if(Hash::check( $data['login_passwd'], $user->passwd) == true) {
$request->session()->put('usuario', $user);
$ses = $request->session()->get('usuario');
return json_encode(array("resultado" => $ses));
} else {
}
} else {
}
控制器函数获取会话:
public function getDatos(Request $request)
{
return json_encode(array("resultado"=>$request->session()->get('usuario')));
}
谁能帮帮我?
谢谢
您需要添加: $request->session()->save();
放置后会话将不会持续。
奇怪的是,即使在官方文档中也不存在这个重要的细节。
只需删除 web
中间件。由于 Laravel 5.3 它默认应用于所有路由。如果您手动应用它,那么会话逻辑会执行两次并且会中断。
关于 session()->save()
的注释:
如果您要返回 Laravel 响应(即 view()
、response()
等),则无需调用此方法。 Laravel 将在返回响应之前调用它。同样,如果您两次调用此方法,您可能会丢失会话中的任何闪存数据...