【Laravel笔记】16. Cookie和Session

关于 拾年之璐

微信公众号知行校园汇,点击查看,欢迎关注

其他平台(点击蓝字可访问):

GitHub  |  Gitee  |  哔哩哔哩  |  语雀  |  简书  |  微信小程序  |  知行达摩院  

本文专栏:Laravel  点击查看系列文章

本文主要内容:

16.1 使用Cookie

1、首先,获取Cookie 有两种方法,具体如下:

//使用request()->cookie 获取解密后的cookie 信息
return request()->cookie('laravel_session');

//使用Cookie::也可以获取,引入Illuminate\Support\Facades\Cookie;
return Cookie::get('laravel_session');

注意:

Laravel 中cookie 都是加密的,原生cookie方法 只能获取加密信息

如果想某个cookie 不加密,在中间件文件夹设置:Http/Middleware/milldelEncryptCookies.php

protected $except = [
    //
    'name'
];

2、使用 response() 方法,可以 创建cookie

//response()方法写入一个cookie
return response('Hello Cookie')->cookie('name', 'Mr.Lee', 10);

参数3,是过期时间,已分钟为单位
这里必须有return,否则无法写入

一般不用这个。

3、使用 Cookie::queue() 方法来写入cookie;

//推荐这个,清爽很多
Cookie::queue('age', 100, 10);

4、使用 助手函数cookie() 来创建cookie 实例,然后再写入,更加灵活;

//助手函数,创建一个实例,让写入可以更加灵活
$cookie = cookie('gender', '男', 10);
//这里可以对$cookie做一系列处理
//最后写入
Cookie::queue($cookie);

助手函数完整版:

//完整版,后面四种:路径,域名,https,仅http
cookie($name, $value, $minutes, $path, $domain, $secure, $httpOnly)

16.2 使用Session

1、首先,启动Web 后,默认会有session,通过下面代码获取所有;

//使用request():
return request()->session()->all();
//也可以使用:
return Session::all();

返回结果:

{
    "_token": "RA5s7slX29z04Yoq5B1P7ZJWHecjfRppacaKTsZC",
    "_previous": {
        "url": "http://127.0.0.1:8000/session/index"
    },
    "_flash": {
        "old": [],
        "new": []
    }
}

2、使用 get() 获取某一个session;

//获取其中一个session
return request()->session()->get('_token'); 

//下面这个方法也可以
return Session::get('_token');//输出:RA5s7slX29z04Yoq5B1P7ZJWHecjfRppacaKTsZC

//参数2,闭包设置默认值
return request()->session()->get('name', function () {
    return 'no session name';
});
//输出:no session name

3、助手函数session(),可以获取并可以设置默认值

//获取session 值
return session('_token');//输出:RA5s7slX29z04Yoq5B1P7ZJWHecjfRppacaKTsZC

//获取session 值并设置默认值
return session('name', 'no session name');//输出:no session name

4、判断是否存在 session 有两种方案:

//判断是否存在且不为null
return Session::has('name'); 
return request()->session()->has('name');		//支持request()方式;

//判断是否存在,即使是null
return Session::exists('name'); 
return request()->session()->exists('name');	//支持request()方式;

5、可以使用助手函数传递数组的方式或 put() 方法,来 存储session 值;

//使用助手函数传递数组
session(['name1' => '张三']);
//使用put()方式
Session::put('name2', '李四');
//支持request()存储
request()->session()->put('name3', '王五');
//看看结果
return Session::all();

结果:

{
    "_token": "RA5s7slX29z04Yoq5B1P7ZJWHecjfRppacaKTsZC",
    "_previous": {
        "url": "http://127.0.0.1:8000/session/index"
    },
    "_flash": {
        "old": [],
        "new": []
    },
    "name1": "张三",
    "name2": "李四",
    "name3": "王五"
}

6、使用 push()方法,可以存储数组,支持 request()方式;

//session 数组方式
Session::push('info.name', '张三');   //同:request()->session()->push('info.name', '张三')
Session::push('info.name', '李四');   //同:request()->session()->push('info.name', '李四')
Session::push('info.name', '王五');   //同:request()->session()->push('info.name', '赵六')
//看看结果
return Session::all();

结果:

{
    "_token": "RA5s7slX29z04Yoq5B1P7ZJWHecjfRppacaKTsZC",
    "_previous": {
        "url": "http://127.0.0.1:8000/session/index"
    },
    "_flash": {
        "old": [],
        "new": []
    },
    "info": {
        "name": [
            "张三",
            "李四",
            "王五"
        ]
    }
}

8、使用 flash() 方法,获取后自动删除,支持request()方式;

//存储的session 只能被获取一次,然后自动删除,flash 也称为闪存数据
Session::flash('name', '张三');

//看看结果
return Session::all();

这时,执行结果为:

{
    "_token": "RA5s7slX29z04Yoq5B1P7ZJWHecjfRppacaKTsZC",
    "_previous": {
        "url": "http://127.0.0.1:8000/session/index"
    },
    "_flash": {
        "old": [],
        "new": [
            "name"
        ]
    },
    "name": "张三"
}

然后将上面的创建flash的代码注释,刷新网页,结果为:

{
    "_token": "RA5s7slX29z04Yoq5B1P7ZJWHecjfRppacaKTsZC",
    "_previous": {
        "url": "http://127.0.0.1:8000/session/index"
    },
    "_flash": {
        "old": [
            "name"
        ],
        "new": []
    },
    "name": "张三"
}

然后再刷新一下,结果为:

{
    "_token": "RA5s7slX29z04Yoq5B1P7ZJWHecjfRppacaKTsZC",
    "_previous": {
        "url": "http://127.0.0.1:8000/session/index"
    },
    "_flash": {
        "old": [],
        "new": []
    }
}

就是这么个过程。

9、如果使用闪存数据,本次请求不要立刻自行删除,可以使用reflash();

//本次请求获取,不要删除数据,给下一次请求时再自行删除,这是保存所有闪存数据
Session::reflash(); 
//保存单独的删除数据
Session::keep(['name']);

示例:

首先创建两个闪存数据:

Session::flash('name', '张三');
Session::flash('id', '10001');

//看看结果
return Session::all();

结果为:

{
    "_token": "RA5s7slX29z04Yoq5B1P7ZJWHecjfRppacaKTsZC",
    "_previous": {
        "url": "http://127.0.0.1:8000/session/index"
    },
    "_flash": {
        "old": [],
        "new": [
            "name",
            "id"
        ]
    },
    "name": "张三",
    "id": "10001"
}

修改代码为:

//Session::flash('name', '张三');
//Session::flash('id', '10001');

//保存单独的删除数据
Session::keep(['name']);
//看看结果
return Session::all();

结果为:

{
    "_token": "RA5s7slX29z04Yoq5B1P7ZJWHecjfRppacaKTsZC",
    "_previous": {
        "url": "http://127.0.0.1:8000/session/index"
    },
    "_flash": {
        "old": {
            "1": "id"
        },
        "new": [
            "name"
        ]
    },
    "name": "张三",
    "id": "10001"
}

然后修改代码为:

//Session::flash('name', '张三');
//Session::flash('id', '10001');

//保存单独的删除数据
//Session::keep(['name']);
//看看结果
return Session::all();

结果为:

{
    "_token": "RA5s7slX29z04Yoq5B1P7ZJWHecjfRppacaKTsZC",
    "_previous": {
        "url": "http://127.0.0.1:8000/session/index"
    },
    "_flash": {
        "old": [
            "name"
        ],
        "new": []
    },
    "name": "张三"
}

再刷新一下,name没了。嗯,就是这么个过程。

10、使用 forget()以删除一条或多条session 数据,支持request()方式;

//删除一条数据
Session::forget('name'); //多条:Session::forget(['name'])
return Session::get('name');
//删除一条数据,并返回
Session::pull('info');
//删除所有数据
Session::flush();

示例:

//添加几个测试数据:
Session::put('id', '10001');
Session::push('info.name', '张三');
Session::push('info.name', '李四');
Session::push('info.name', '王五');

//看看结果
return Session::all();

输出:

{
    "_token": "RA5s7slX29z04Yoq5B1P7ZJWHecjfRppacaKTsZC",
    "_previous": {
        "url": "http://127.0.0.1:8000/session/index"
    },
    "_flash": {
        "old": [],
        "new": []
    },
    "id": "10001",
    "info": {
        "name": [
            "张三",
            "李四",
            "王五"
        ]
    }
}

测试1:

Session::forget('id');

//看看结果
return Session::all();

测试1结果(id被删除):

{
    "_token": "RA5s7slX29z04Yoq5B1P7ZJWHecjfRppacaKTsZC",
    "_previous": {
        "url": "http://127.0.0.1:8000/session/index"
    },
    "_flash": {
        "old": [],
        "new": []
    },
    "info": {
        "name": [
            "张三",
            "李四",
            "王五"
        ]
    }
}

测试2:

return Session::pull('id');

测试2结果:

10001

这里删除了一条数据,并返回了删除的数据

测试3:

//删除所有数据
Session::flush();
//看看结果
return Session::all();

测试3结果:

[]

全删除了,只剩下一个空数组了哈哈哈

11、 使用 regenerate() 可以重新生成SessionID

上面清空了session,然后重新生成:

//重新生成SessionID
Session::regenerate();
//看看结果
return Session::all();

//获取SessionID,
return Cookie::get('laravel_session');

输出:

{
    "_previous": {
        "url": "http://127.0.0.1:8000/session/index"
    },
    "_flash": {
        "old": [],
        "new": []
    },
    "_token": "Gr28KwYuEgDvs0k0N4RAWSkrnO7zDEQCnNCYS3S3"
}

和上面比较一下,token已经变了。

以上。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

拾年之璐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值