0
点赞
收藏
分享

微信扫一扫

【Laravel笔记】16. Cookie和Session


本文主要内容:


  • ​​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 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已经变了。


以上。



举报

相关推荐

0 条评论