首页 > 解决方案 > 从任何控制器重定向到另一个控制器时,如何防止 laravel 5.2 中丢失的会话值?

问题描述

我正在尝试在 laravel 5.2 中制作登录系统,我使用 put 方法存储会话数据。这是我的登录控制器,我在 displayHome() 函数中存储会话数据

 <?php
        namespace App\Http\Controllers;
        use Illuminate\Http\Request;
        use App\Http\Requests;
        use App\app_users;
        use Redirect;
        use Session;
        use Crypt;
        class login extends Controller
        {


        function displayHome(){
          $request->session()->put('session_login',array('email'=>'someone@gmail.com','username'=>$'someone'));
         //print_r(session('session_login')); die();
         //`data session successfully stored `
        }
        }

我已经printr()会话值。一切正常并存储会话。但是当我重定向到另一个控制器时,会话失去了它的价值,这就是我重定向到另一个控制器的方式

return Redirect::to('members');

我的路线成员看起来像

 Route::group(['module' => 'Members', 'middleware' => ['web'], 'namespace' => 'App\Modules\Members\Controllers'], function() {
        Route::get('members','MembersController@index');
});

成员控制器看起来像

namespace App\Modules\Members\Controllers;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
Use Redirect;
use Session;
class MembersController extends Controller
{
function index(){
//data session is empty 
print_r(session()->get('session_login')); die();
}
}

我尝试在索引函数()中获取会话数据,结果为空。请给我正确的解决方案来解决这个问题?

标签: laravelsession

解决方案


您需要使用该flash方法在请求之间保留会话数据:

$request->session()->flash('session_login', $data);

然后reflash()andkeep可用于更多请求:

$request->session()->reflash();

$request->session()->keep(['session_login']);

有时您可能希望将项目存储在会话中仅用于下一个请求。您可以使用 flash 方法执行此操作。

如果您需要为更多请求保留闪存数据,您可以使用刷新方法,该方法将保留所有闪存数据以用于其他请求。如果您只需要保留特定的闪存数据,则可以使用 keep 方法。

Flash 会话数据

更新

确保您已添加\Illuminate\Session\Middleware\StartSession::class到.webKernel.php


推荐阅读