laravel在重定向时无法检索会话

时间:2017-07-04 16:56:35

标签: laravel session

在laravel 5.4

class AdminController extends Controller
{

   public function checkLogin(Request $request)
   {
      Session::put('admin','yes');
      return redirect('mobiles');
   }
}

class MobilesController extends Controller
{
      public function __construct()
      {
         if( ( Session::has('admin') ) )
           { dd('admin');}
        else
           { dd('not admin'); }
     }
}

它会打印'not admin'所以会话会发生什么,如果我在类checkLogin中打印管理会话,它会正常打印

3 个答案:

答案 0 :(得分:1)

由于 L5.3 ,您无法访问控制器构造函数中的会话。你必须使用一个闭包:

public function __construct()
{
    $this->middleware(function ($request, $next) {
        echo Session::has('admin') ? 'admin' : 'not admin';
        return $next($request);
    });
}

https://laravel.com/docs/5.3/upgrade#5.3-session-in-constructors

答案 1 :(得分:0)

而不是

Session::has('admin')

您可以使用

session()->has('admin')

答案 2 :(得分:0)

你必须使用laravel flashhed-session-data

https://laravel.com/docs/5.4/redirects#redirecting-with-flashed-session-data

a.onclick = test;

所以像这样修改你的代码

return redirect('mtest2')->with('admin','yes');

如果您不想使用闪烁数据

,这是更新的代码
class AdminController extends Controller {

    public function checkLogin(Request $request){
        return redirect('mobiles')->with('admin',true);
     }
 }

 class MobilesController extends Controller {

     public function __construct() {

       if( session()->has('admin') ){ 
          dd('admin');
       }else{ 
          dd('not admin'); 
       }
     }
 }

它应该有用。