Http之cookie和session
一、什么是会话呢?
会话就是浏览器和服务器之间进行数据交互的过程,当我们打开一个浏览器就相当于开启会话,当我们关闭浏览器时会话就结束了。而cookie和session就是两种会话技术,该技术是用来存储浏览器和服务器交互过程中产生的数据。
二、cookie详解
1.cookie的工作原理
1.1 创建cookie
① 服务器为该用户生成一个唯一的识别码(Cookie id)并创建Cookie对象存储会话过程中产生的数据。
② 服务器将该Cookie插入到一个 Set-Cookie HTTP响应头中。
③ 发送该HTTP响应头给浏览器。
1.2 存储cookie
浏览器获取到返回的响应头,根据其中的Set-cookie生成响应的cookie并保存在浏览器的内存中。
1.3 发送Cookie
当浏览器再次访问该网站时,浏览器会检查所有已存储的cookies,如果能匹配到该网站的cookie,则把该cookie附在请求资源的Http请求头中并发送给服务器。
1.4 读取cookie
服务器接收到请求头中的cookie并解析,在页面展示cookie中存储的信息。
2.cookie经典应用场景
Ⅰ、记住密码,下次自动登录。
用户进行登录操作,服务器提示是否保存一个cookie,如果保存,那么服务器会将登录的账号和密码都存储在cookie中并返回给浏览器。当用户再次访问登录页面时,服务器会判断浏览器的请求中是否包含cookie,如果包含,用户就可以不用输入账号和密码直接自动登录。这样就实现了前后两次请求过程中的数据共享问题 (注意:request域对象在两次请求中不能共享数据,每次请求服务器都会创建新的request对象)。
Ⅱ、购物车功能。
实现购物车的关键在于服务器识别每一个用户并维持与他们的联系。但是HTTP协议是一种“无状态”的协议,因而服务器不能记住是谁在购买商品,当把商品加入购物车时,服务器也不知道购物车里原先有些什么,使得用户在不同页面间跳转时购物车无法“随身携带”,这都给购物车的实现造成了一定的困难。这时需要cookie或者session实现购物车里添加的商品信息在服务器中各个页面之间共享数据。
Ⅲ、记录用户浏览数据,进行商品(广告)推荐。
三、session详解
1.session的工作原理
1.1 创建session
① 当用户访问一个服务器,如果服务器启用SESSION,就要为该用户创建一个SESSION,在创建这个SESSION的时候,服务器先检查这个用户发来的请求里是否包含了一个SESSION ID。
② 如果包含,服务器就按照这个SESSION ID把这个SESSION在服务器的内存中查找出来。
如果不包含,则为该客户端创建一个SESSION并生成一个与此SESSION相关的SESSION ID。
③ 这个SESSION ID是唯一的、不重复的、不容易找到规律的字符串,这个SESSION ID将被在本次响应中返回到客户端保存,而保存这个SESSION ID的正是COOKIE,这样在交互过程中浏览器可以自动的按照规则把这个标识发送给服务器。
2.1 使用session
我们知道在IE中,我们可以在工具的Internet选项中把Cookie禁止,那么会不会出现把客户端的Cookie禁止了,SESSIONID就无法再用了呢?找了一些资料说明,可以有其他机制在COOKIE被禁止时仍然能够把Session id传递回服务器。
经常被使用的一种技术叫做URL重写,就是把Session id直接附加在URL路径的后面一种是作为URL路径的附加信息,表现形式为:
http://…./xxx;jSession=ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng!-145788764;
另一种是作为查询字符串附加在URL后面,表现形式为:
http://…../xxx?jSession=ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng!-145788764
还有一种就是表单隐藏字段。就是服务器会自动修改表单,添加一个隐藏字段,以便在表单提交时能够把Session id传递回服务器。
四、COOKIE和SESSION的区别
1. COOKIE是浏览器端会话技术,SESSION是服务器端会话技术;
2. SESSION的数据安全性比COOKIE要高;
3. COOKIE只能存储ASCII表中对应的字符串,使用过程中需要进行编码,并且不能直接存取JavaBean对象;
SESSION支持所有数据类型的存取,包括而不限于String、Integer、List、Map等,可以看成Java容器;
4. COOKIE存储数据的大小有限制,一个COOKIE的大小不超过4KB;SESSION则无限制;
5. SESSION对服务器的资源占用高,不适合用户并发访问;COOKIE存储在客户端,不占用服务器资源;
作者:Pojo_996
来源:
原文:https://www.jianshu.com/writer#/notebooks/37011485/notes/46828813
版权声明:本文为博主原创文章,转载请附上博文链接!