作者:拾年之璐 公众号:知行研究院
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已经变了。
以上。