关于 拾年之璐

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

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

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

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

本文主要内容:

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

以上。

【Laravel笔记】16. Cookie和Session相关推荐

  1. javaweb入门笔记(5)-cookie和session

    2019独角兽企业重金招聘Python工程师标准>>> javaweb入门笔记(5)-cookie和session 标签: javaweb [TOC] Cookie是客户端技术:Se ...

  2. 完全PHP5笔记之(COOKIE与SESSION篇)

    最近发现写博客也是提高 学习 效率的有效途径之一.好记性不如烂笔头,归纳总结时,你会发现总有一些东西你认为很熟了,它却在细微处讽刺你的错误.我学习COOKIE与SESSION 时,几乎把社区所有相关的 ...

  3. 【学习笔记】cookie、session、token和分布式session

    文章目录 cookie和Session session和token cookie和token总结 分布式Session cookie和Session 为什么要有session的出现? 答:是由于网络中 ...

  4. PHP笔记:Cookie和Session应用

    文章目录 为什么要使用回话,PHP使用回话的三种方式 PHP操作Cookie和Session的应用 Cookie实现控制登录时间(通过确保客户端的Cookie存活时间来确保登录有效时间) Cookie ...

  5. 爬虫笔记三 cookie 和 session和 正则 和 数据类型 和 代理

    cookie 和 session 产生的原因:http协议无状态,访问之间不能通讯 cookie 指某些网站为了辨别用户身份.进行会话跟踪而存储在用户本地终端上的数据. 做爬虫时,使用账号登录,封装c ...

  6. 爬虫课程笔记(二)Requests、代理、cookie和session

    爬虫课程笔记 Requests 使用入门 Requests作用 发送简单的请求 content和text 区别 发送带header的请求 发送带参数的请求 发送POST请求 贴吧爬虫案例 使用代理 c ...

  7. Cookie与Session相关学习笔记

    一.会话技术 会话: 为了实现某一个功能, 浏览器和服务器之间可能会产生多次的请求和响应, 从浏览器访问服务器开始, 到最后浏览器关闭, 这期间产生的多次请求和响应就称之为浏览器和服务器之间的一次会话 ...

  8. Web后端学习笔记 Flask(9)cookie and session

    Flask_wtf除了可以做表单验证,模板渲染之外,还可以防御CSRF攻击.要了解CSRF攻击的原理,首先需要了解cookie和session的知识点. cookie:在网站中,HTTP请求是无状态的 ...

  9. 【读书笔记】深入分析Java Web技术内幕-Cookie与Session

    1. cookie a. cookie的属性项(version1)i. NAME=VALUEii. versioniii. comment--注释项iv. commentURL--服务器为此cooki ...

最新文章

  1. 初步建立了完整AI产业链,我国AI域累计融资世界第一
  2. 1001.害死人不偿命的(3n+1)猜想
  3. 54.施工方案第二季(最小生成树)
  4. Android Canvas简单使用
  5. 国内物联网平台初探 ——移动云OneNET
  6. Linq:使用Take和Skip实现分页
  7. 电脑键盘下划线怎么打_电脑键盘失灵怎么办?你应该学会的四种方法
  8. amp;#9733;一名“标题党”自我修炼的10…
  9. java 字符流异常处理_IO字符流9jdk7和jdk9中流的异常的处理
  10. 软硬件联合调试步骤_PLC与SCADA或第三方软件的联合仿真调试—NetToPLCSIM
  11. C# Get请求携带body
  12. JEP JAVA 初体验
  13. 疫情之后,各地智慧灯杆政策与项目发布情况汇总
  14. 早早起来真的可以做许多事,比如再睡一觉
  15. EeePC 901换装Windows XP的步骤
  16. 华为“达芬奇计划”首次曝光!
  17. 【软件测试】入门答疑,概念
  18. 数据分析实例-餐饮行业分析
  19. 如何在你的window系统上运行jar文件
  20. spark (3)Spark Standalone集群安装介绍

热门文章

  1. 【MicroPython】基于microbit的MicroPython编程--HELLO WORLD
  2. chatgpt怎么用 chatgpt使用教程
  3. 太阳能路灯的根本结构及作业原理
  4. 【操作系统】选择题汇总大全
  5. c#——InitializeComponent();
  6. 计算机视觉——基于BOW的图像检索(作业六)
  7. 用python爬取豆瓣某本书的前n条书评并计算评分(star)的平均值
  8. odoo企业版与社区版区别(odoo14企业版)
  9. 基于Scrapy框架的当当网编程开发图书定向爬虫
  10. C/C++的就业,发展方向