從網上查詢資料得知,在laravel中使用__construct方法的時候,session還沒開啟,此時就需要用到中間件來解決。
$this->middleware(function ($request, $next) { var_dump(\Session::get('userid')); exit; });
我這里用到的__construct函數,是用來判斷同一個賬號是否在另一個客戶端登錄,比如A客戶端正在登錄,此時B客戶端也要登錄,B客戶端登錄成功后,A客戶端就會退出
通過驗證當前的登錄IP是否一致來判斷。
這是一個公共類,該類繼承了Controller類,所以只要用到這個公共類,其他類只需把繼承的Controller類換成該公共類就可以了
public function __construct(Request $request) { // 判斷是否已在客戶端登錄 $this->middleware(function ($request, $next) { $ip = md5($_SERVER['REMOTE_ADDR']);//當前的IP,md5加密 $res = DB::table('users')->where(['uid'=>\Session::get('userid')])->first(); if ($ip != $res->IP) { return redirect('/adminlogin');
exit; } return $next($request); }); }