会话不会持续在Laravel 5.4上

时间:2018-01-16 21:57:37

标签: session laravel-5.4

我在Laravel Sessions遇到了一些问题,现在我在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')));
}

任何人都可以帮助我?

由于

2 个答案:

答案 0 :(得分:4)

您需要添加:     $请求 - >会话() - >保存();

之后,否则会话将不会持续。

奇怪的是,即使在官方文档中,这个重要细节也不存在。

答案 1 :(得分:0)

只需删除web中间件。从Laravel 5.3开始,默认情况下将其应用于所有路由。如果您手动应用它,那么会话逻辑将执行两次,并且会中断。

关于session()->save()的注释:

如果您要返回Laravel响应(例如view()response()等),则无需调用此函数。 Laravel将在返回响应之前调用此方法。再次,如果您两次拨打此电话,则可能会丢失会话中的所有闪存数据。