PHP日记——Lavarel操作cookie和session

在实际开发中难免会有登录功能,这个功能主要依靠cookiesession来传递登录的用户
我们以一个登录系统为例

首先配置好路由

web.php或者route.php

Route::any('/login', 'LoginController@login');
Route::any('/logout', 'LoginController@logout');
Route::any('/index', 'LoginController@index');
<?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');
        }
    }
}

sessioncookie少了时间设置,操作起来也比较简单

最后附上一个简单判断是否登录的中间件写法

新建一个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);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值