Cookie Session 与Token
由于HTTP是一种无状态的协议,服务器端无法知道用户与客户端交互的状态,比如如果一个用于之前已经访问过该服务器,服务器无法知道该用户是第二次访问,Session和Cookie都是用来保存用户与后端服务器的交互状态,简单来说Cookie存储在用户端,而Session存储在服务器端,这种存储方式的不同造成了二者在使用上的巨大区别
- 由于Cookie在客户端,每次请求的时候都要带着Cookie,如果Cookie非常大且每天的流量很大那么Cookie会占用很大带宽
- Session在服务器端,但他只保存在一个服务器上,所以多台服务器共享Session会出现问题
1、理解Cookie
当用户第一次访问服务器的时候,服务器会生成一些Key-Value对并放在客户端,并为这些数据加上一些限制条件。当客户端第二次访问浏览器到时候会带上这些Key-Value对,服务器会根据Key-value来划分用户。比如根据Cookie来判断用户是否登录,比如根据用户上次的访问记录来判断哪些数据被该用户频繁访问,并做出相应的缓存
1.1 Cookie属性项
除了想要保存的Key-Value之外还会有一些Cookie的属性项。

1.2 Cookie如何工作
Tomcat在Response类中完成返回值的Cookie的构建,把Cookie对象构造成一个字符串放在返回信息的Header中。
客服端发起请求的时候,浏览器会根据URL路径把所有符合条件的Cookie放在Request的请求头中传给服务端。
1.3 使用Cookie的限制
虽然在写爬虫的时候Cookie和Header是两个字段,但其实Cookie是放在Header中的。浏览器对Cookie的限制主要是大小和数量的限制。
2、理解Session
为了解决Cookie每次传输占有大量带宽的问题,出现了Session。客户端第一次访问服务端的时候,服务端生成一些信息但不传回客户端,而是保存在服务端并把信息的ID传回给客户端。这样下次客户端在发送信息的时候只需要发送该ID即可。所以Session是基于Cookie的,即在Cookie的键值对集合里加入一个名为JSESSIONID的键值对。
2.1 Session与Cookie
大部分情况下Session是基于Cookie来实现的,基于Cookie的Session就是Cookie中普通的一个属性,即在Cookie中找到JSESSIONID对应的Value然后完成后续处理。
如果浏览器禁用了Cookie则默认采用基于URL Path parameter的Session。此时浏览器会把SessionCookieName重写到用户请求的URL参数中,SessionCookieName默认就是JSESSIONID。
2.2 Session如何工作
自己写简单的TomcatWeb项目的时候可以发现及时没有设置Cookie的字段,只要开始了Cookie功能浏览器发来的请求中的Cookie都会带有JSESSIONID。服务端发现一个JSESSIONID没有找到对应的Session对象的时候就会创建一个新的Session对象,并保存在Manager维护的Session容器里。Manager会管理所有的Session,如生命周期、服务器关闭序列化到磁盘上。只有调用Tomcat容器的stop方法才会保存所有未过期的Session对象,直接KILL是不会保存的。
3、Cookie安全问题
Cookie是保存在浏览器里的,很多插件是可以编辑Cookie的。相对保存在服务器端的SessionCookie不够安全。
4、分布式Session框架
4.1 谁家的孩子谁抱走
在分布式环境下,不同的应用服务器存储的Session不同,所以单独使用Session是不行的。Cookie很好的解决了这个问题,因为Cookie是在浏览器端的,即使请求被转发到不同的服务器上,但是浏览器都会带上自己的Cookie,身份认证不会出现问题。这种被称为谁家的孩子谁抱走的策略存在以下问题:
- 安全问题。Cookie毕竟是不安全的
- 限制问题。浏览器对Cookie是根据域名有数量限制的
4.2 分布式Session
6、表单重复提交
无论是恶意的还是由于网速问题带来的表单重复提交都是需要防止的,既可以通过一个中间跳转页面来实现,也可以通过Token来实现。
要实现防止表单重复提交就需要标识用户的每一次访问请求,使每一次访问对服务端都是唯一确定的。当用户第一次来到登陆页面的时候,后台发放一个token并放到该次请求的Session中,然后在form表单中hidden域里提交token。第一次表单提交的时候后台可以看到form里的token和后台记录下的该token是一致的,放行并清除该Session的Token。当第二次表单提交的时候发现提交过来的token为空,则不予放行。
7、多终端Session统一
Cookie Session 与Token的更多相关文章
- 存储机制 cookie session jwt token
cookieCookie的诞生 由于HTTP协议是无状态的,而服务器端的业务必须是要有状态的.Cookie诞生的最初目的是为了存储web中的状态信息,以方便服务器端使用.比如判断用户是否是第一次访问网 ...
- Cookie.Session到Token和JWT
一.session和cookie: 现在一般都是session和cookie一起用,一起提.但是他们俩其实不是一定要在一起. session的产生原因是,http协议是无状态的 这就导致了,不同的用户 ...
- cookie,session和token的概念以及区别
cookie: 采用客户端保存状态的方案: cookie的组成:名字,值过去时间,路径以及域: 没有设置时间:随着浏览器的打开和关闭决定: 设置了时间:浏览器就会把cookie保存在硬盘上,根据时间来 ...
- cookie、session与token
一.详述概念 1.Cookie机制 cookie机制是采用在客户端保持状态的方案(cookie的作用就是为了解决HTTP协议无状态的缺陷所作的努力).cookie的使用是由浏览器按照一定的原则在后台自 ...
- cookie,session,token的定义及区别
参考了很多文章总结的. 1.cookie(储存在用户本地终端上的数据) 服务器生成,发送给浏览器,浏览器保存,下次请求同一网站再发送给服务器. 2.session(会话) a.代表服务器与浏览器的一次 ...
- cookie, session, token 是什么 以及相应的安全考量
Cookie cookie 最常见的是用来保存一些账号信息,比如下图里的 记住账号 就是记录到了cookie里面 cookie 更主要的是针对和server通信的,我们知道http 是无状态的,那如果 ...
- cookie、session和token
https://zhuanlan.zhihu.com/p/25495290?utm_source=wechat_session&utm_medium=social 一.cookie 众所周知, ...
- Cookie、Session 和 Token区别
1 Cookie.Session 和 Token 都是用来做持久化处理的,目的就是让客户端和服务端相互认识.Http 请求默认是不持久的没有状态的,谁也不认识谁. 2 Cookie: 是存放在客户 ...
- 为什么你学不会递归?告别递归,谈谈我的一些经验 关于集合中一些常考的知识点总结 .net辗转java系列(一)视野 彻底理解cookie,session,token
为什么你学不会递归?告别递归,谈谈我的一些经验 可能很多人在大一的时候,就已经接触了递归了,不过,我敢保证很多人初学者刚开始接触递归的时候,是一脸懵逼的,我当初也是,给我的感觉就是,递归太神奇了! ...
随机推荐
- JDBC 异常简介 jDBC简介(六)
SQL 异常简介 对于数据库的操作访问,必然也很可能抛出异常. JDBC中定义了SQLException,用于描述数据库相关操作中可能出现的异常情况. java.sql.SQLException ...
- Perl处理和收走子进程(退出状态码和wait)
本文关于处理子进程退出状态码的内容主体来自于<Pro Perl>的第21章. 子进程退出状态码 每个子进程在退出时,操作系统都会保留它们的退出状态码,并在内核维护的进程表中保留子进程项.对 ...
- DSAPI多功能组件编程应用-文件类
[DSAPI.DLL下载地址] 本节内容,是属于"无需过多说明"就能使用的功能.由于实在是太简单,我就简单地示例一下. DSAPI.文件类.获取可读性强的字节大小信息(&q ...
- 杭电ACM2003--求绝对值
求绝对值 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submis ...
- 设计模式-建造者模式(Builder)
简介: 将一个复杂的对象的构建与它的表示分离,使得同样的构建过程创建出不同的表示. 结构图: 优点: 使得创建代码和表示代码分离,建造者隐藏了该产品是如何组装的,所以若需要改变一个产品内部的表示,只需 ...
- python爬虫项目(scrapy-redis分布式爬取房天下租房信息)
python爬虫scrapy项目(二) 爬取目标:房天下全国租房信息网站(起始url:http://zu.fang.com/cities.aspx) 爬取内容:城市:名字:出租方式:价格:户型:面积: ...
- java开发环境配置——Maven
前篇讲了jdk的安装,这篇讲一下包管理工具Maven,Maven主要是用来统一管理项目引用的jar包,还有用来打包的. Maven官网下载地址:http://maven.apache.org/down ...
- 【Dojo 1.x】笔记目录
学习笔记和教程是不同的,笔记是随心记,学到什么就写什么,我尽量按逻辑顺序写笔记. Dojo是什么? Dojo是这么一个JavaScript框架,区别于jQuery等小型类库,这个类库更合适于构建Web ...
- CentOS6.9升级autoconf版本,解决”Autoconf version 2.64 or higher is required“错误
安装软件时提示说需要Autoconf 2.64或更高的版本: # autoconf configure.ac:: error: Autoconf version 2.64 or higher is r ...
- Kotlin入门(31)JSON字符串的解析
json是App进行网络通信最常见的数据交互格式,Android也自带了json格式的处理工具包org.json,该工具包主要提供了JSONObject(json对象)与JSONArray(json数 ...