本文主要内容:
- 16.1 使用Cookie
- 16.2 使用Session
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 name3、助手函数session(),可以获取并可以设置默认值
//获取session 值
return session('_token');//输出:RA5s7slX29z04Yoq5B1P7ZJWHecjfRppacaKTsZC
//获取session 值并设置默认值
return session('name', 'no session name');//输出:no session name4、判断是否存在 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已经变了。
以上。










