彻底理解Cookie Session token

Cookie
cookie 是一个非常具体的东西,指的是浏览器中能永久存储的一种数据,仅仅是浏览器实现的一种数据存储功能
Cookie的内容是保存一小段文本信息,这些文本信息组成一份通行证。它是客户端对于无状态协议的一种解决方案。

Cookie的原理

(1)客户端第一次请求时,发送数据到服务器。

(2)服务器返回响应信息的同时,还会传回一个cookie(cookie S-001)

(3)客户端接收服务器的响应之后,浏览器会将cookie存放在一个统一的位置。

(4)客户端再次向服务器发送请求的时候,会把Cookie S-001再次发挥服务器。
在这里插入图片描述
cookie的生命周期

cookoe的生存时间是整个会话期间:浏览器会将cookie保存在内存中,浏览器关闭时自动删除这个cookie

cookie的生存时间是长久有效的:手动将cookie报存在客户端的硬盘中,浏览器关闭的话,cookie页不会清除;下次在打开浏览器访问对应网站内容,这个cookie就会自动再次发送到服务器。

session的原理:

(1)服务器在处理客户端请求过程中会创建session,并且为该session生存唯一的session ID。(这个session ID在随后的请求中会被用来重新获得已经创建的session。在session被创建后,就可以调用session相关的方法向session中新增内容,这些内容只会保存在服务器中)

(2)服务器将session ID发送到客户端

(3)当客户端再次请求时,就会带上这个session ID

(4)服务器接收到请求之后就会一句Session ID 找到相应的Session ,完成请求

ps:1、虽然session保存在服务器,但它还是需要客户端浏览器的支持,因为session需要使用cookie作为识别标志。服务器会向客户端发送一个名为JSEDDIONID的cookie,它的值为session ID。

    2、当cookie被禁用时,可以使用url重写的方法:将session写在URL中,服务器在进行解析

在这里插入图片描述
session的生命周期:

与cookie一直,服务器也能设置session的生效时间。

cookie和session的区别

1、存储位置不同:session存储在服务器,cookie存储在客户端

2、存储容量不同:单个cookie保存数据小于等于4kb,一个站点最多保存20个cookie;session没有上限,但是由于服务器内存性能考虑,session不要存太多东西,并有删除机制

3、存取方式不同:cookie只能保存ASCII字符串;session能存取任何类型的数据

4、隐私策略不同:cookie是对客户端是可见的,可以分析存放在本地的cookie并进去cookie欺骗;session存储在服务器上,对于客户端是透明的,不存在敏感信息泄露的风险

5、服务器压力不同:session是保存在服务端,每隔用户都会产生一个session。加入并发访问的用户太多,会产生很多的session,对服务器是一个很大的负担,耗费大量内存

                               cookie保管在客户端,不占用服务器资源。对于并发用户十分多的网站,session是一个很好的选择。

6、浏览器的支持不同:session不支持新建窗口,只支持字窗口。而cookie都支持。

                                  假设浏览器禁用cookie,session可以通过URL重写的方法实现。COOKIE就派不上用场。

Token的原理:

(1)客户端第一次请求时,发送用户信息到服务器。服务器对用户信息使用HSA256算法及密钥进行签名,再将这个签名和数据一起作为token返回给客户户端。

(2)服务端不再保存token,客户端保存token。

(3)当客户端再次发送请求时,在请求信息中将token一起发送给服务器。

(4)服务器用同样的HSA256算法和密钥,对数据再计算一次签名,和token的签名做比较

(5)如果相同,服务器就知道客户端登录过,则反之。

热门文章

暂无图片
编程学习 ·

使用pip离线安装python扩展包依赖模块

简答来说就是从一台有网的主机下载好,放到离线主机上,用pip实现1.查看安装了哪些pip3 freeze网上一般都是pip3 freeze >requirements.txt 这就是查看安装了那些,然后存到文件里面2.就是把安装好的打包了,上面那个文件存的就是要打包的,我们完全可以直接,在里面写好想…
暂无图片
编程学习 ·

IBM分布式深度学习平台FfDL了解

IBM的分布式深度学习平台FfDL(Fabric for Deep Learning) 是用于分布式深度学习模型训练,基于微服务的平台。用户通过提交深度学习作业到已部署FfDL的服务器集群或者云上来进行训练。方便了拥有服务器集群的大型公司或机构进行深度学习硬件资源的调度管理。FfDL会自动调度用户…
暂无图片
编程学习 ·

layui的时间控件laydate实现不用点击确定按钮

laydate.render({elem: #start, //指定元素type:month, //插件只选择年月showBottom :false, //关闭底部框 去掉取消、确定、清空按钮change: function(value, date, endDate){$("#start").val(value);if($(".layui-laydate").length){$(".layu…
暂无图片
编程学习 ·

718. 最长重复子数组

给两个整数数组 A 和 B ,返回两个数组中公共的、长度最长的子数组的长度。目录1、题目分析2、解题分析3、代码示例 1:输入: A: [1,2,3,2,1] B: [3,2,1,4,7] 输出: 3 解释: 长度最长的公共子数组是 [3, 2, 1]。1、题目分析求两个数组公共的子数组的长度,那么可以用较短的那个…
暂无图片
编程学习 ·

kubectl源码分析之config delete-context

发布一个k8s部署视频:https://edu.csdn.net/course/detail/26967课程内容:各种k8s部署方式。包括minikube部署,kubeadm部署,kubeasz部署,rancher部署,k3s部署。包括开发测试环境部署k8s,和生产环境部署k8s。腾讯课堂连接地址https://ke.qq.com/course/478827?taid=4373…
暂无图片
编程学习 ·

爬虫工作的代理ip选择

代理ip的使用是爬虫工作必须使用的爬取辅助工具,大数据的快速发展,很多的网站不断的维护自己的网站信息,开始设置反爬虫机制,在网站进行反爬虫限制的情况下,怎样通过反爬虫机制,提高工作效率。一:使用多线程与代理ip1、多线程方式:多线程同时开展工作采集,迅速提高工作…
暂无图片
编程学习 ·

MYSQL字符类型字段判断是否包含某个字符N种方法

方法一:使用LIKE关键字SELECT * FROM 表名 WHERE 字段名 LIKE "%字符%";方法二:使用INSTR函数SELECT * FROM 表名 WHERE INSTR(字段,字符);方法三:使用FIND_IN_SET函数SELECT * FROM 表名 WHERE FIND_IN_SET(字符, 字段名);方法四:使用LOCATE函数SELECT * FROM 表…
暂无图片
编程学习 ·

vue前端代码优化-1

也许有人会感觉CR没有什么卵用,只要我代码实现了功能,我完成了开发任务,我就OK了,为啥还要CR??但是CR真的是有必要的,你不仅可以发现自己代码中的不足之处,待优化点,简洁明了的代码易读别人接手也会很快。1. 比如在vue项目中只有某一个组件用某一个特别长的常量对象,…
暂无图片
编程学习 ·

2.4-1、斐波那契数列

1、斐波那切数列 【问题描述】 斐波那切数列0,1,1,2,3,5,8,13,21,34,55……从第三项起,每一项都是紧挨着的前两项的和。写出计算斐波那切数列的任意一个数据项递归程序。 【输入格式】 输入所求的项数。 【输出格式】 输出数据项的值。 【输入样例】fbi.in 10 【输出…
暂无图片
编程学习 ·

Linux下core dump学习

参考链接 在linux下开发时,如果程序突然崩溃了,也没有任何日志。这时可以查看core文件。从core文件中分析原因,通过gdb看出程序挂在哪里,分析前后的变量,找出问题的原因。 1 查看linux下core dump是否开启 在linux上coredump默认是关闭的,可以通过ulimit -c查看,如果输出…
暂无图片
编程学习 ·

Python简单数据库系统-优惠券系统(含UI)

Python简单数据库系统-优惠券系统(含UI) 目录Python简单数据库系统-优惠券系统(含UI)简介需要的东西函数主体券号和密码初始化状态UI出票系统验证系统总结 简介 疫情结束后各大企业尤其是饮食业都在想着法子用优惠券的方式吸引大众消费,于是对优惠券这个小型数据库系统产生…
暂无图片
编程学习 ·

python_ask_02-Are object and instance the same?

ID = python_ask_02 文章目录QuestionAnswerReference Question Are object and instance the same? Answer Are they the same? My answer is NO. We say everything is object, but we never say everything is instance. Class and instance are both object.「对象」是一…
暂无图片
编程学习 ·

关于atomic到底安不安全

atomic 实际上相当于一个引用计数器,这个大家很熟悉,如果被标记了atomic,那么被标记了的内存本身就有了一个引用计数器,第一个占用这块内存的线程,会给这个计数器+1,在这个线程操作这块内存期间,其他线程在访问这个内存的时候,如果发现“引用计数器”不为0,则阻塞,实…
暂无图片
编程学习 ·

dialog 显示图片

private PopupWindow popupDialog;/*** 弹出图片放大框** @param url 图片路径*/ public void showDialog(Context mContext, String url) {if (isFinishing()) {return;}try { //容错if (popupDialog != null) {hideDialog();}View popView = getLayoutInflater().inflate(R.l…
暂无图片
编程学习 ·

Git 操作文档

Git 网站操作1.打开Git的网站,注册一个账号2.注册成功,登录之后是这样3.点击 New Project 新建一个项目填写完成之后选择一下项目的“可见等级”;有:“ Private (私有)” 、“ Internal (内部)”、“ Public (公开)”点击 “ Create Project ”按钮,这个时候项目就已…