在实际开发中难免会有登录功能,这个功能主要依靠cookie和session来传递登录的用户
我们以一个登录系统为例
首先配置好路由
到web.php或者route.php
Route::any('/login', 'LoginController@login');
Route::any('/logout', 'LoginController@logout');
Route::any('/index', 'LoginController@index');
cookie
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
class LoginController extends Controller
{
function login(){
//如果是post方法就储存name到cookie并跳转,如果是get方法就清空cookie并显示登录页面
if($input = Input::all()){
//添加cookie
//设置永久cookie
//return redirect("index")->withCookie(cookie()->forever('name',$input['name']));
//设置10分钟cookie
return redirect("index")->withCookie(cookie()->make('name', $input['name'],10));
}else {
$response = new Response(view('login'));
$response->withCookie(cookie()->forget('user'));
return $response;
}
}
function logout(){
//清空cookie
return redirect("index")->withCookie(cookie()->forget('name'));
}
function index(Request $request){
//获取cookie
$value=$request->cookie('name');
if ($value==null){
return 'fali';
}else{
return view('welcome');
}
}
}
细心的朋友可能会发现,get方法访问login时,渲染页面用了Response包裹着view,这是因为只有重定向时cookie才会发生改变,所以必须new一个Response
session
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
class LoginController extends Controller
{
function login(){
//如果是post方法就储存name到session并跳转,如果是get方法就清空session并显示页面
if($input = Input::all()){
//添加session
session(['user'=>$input['name']]);
return redirect("index");
}else {
//清空session
session(['user'=>null]);
return view('login');
}
}
function logout(){
//清空session
session(['user'=>null]);
return redirect("index");
}
function index(Request $request){
//获取session
$value=session('name');
if ($value==null){
return 'fali';
}else{
return view('welcome');
}
}
}
session比cookie少了时间设置,操作起来也比较简单
最后附上一个简单判断是否登录的中间件写法
新建一个Middleware,取名为AdminLogin
到 Kernel.php注册
protected $routeMiddleware = [
//......
'admin.superlogin'=>\App\Http\Middleware\AdminSuperLogin::class,
];
编写AdminLogin中间件
<?php
namespace App\Http\Middleware;
use Closure;
class AdminLogin
{
public function handle($request, Closure $next)
{
//如果使用session
// if(!session('user')){
//如果使用cookie
if(!$request->cookie('user')){
return redirect('login');
}
return $next($request);
}
}