Cookie和Session的区别

Cookie基于HTTP协议,也叫Web Cookie或浏览器Cookie,是服务器发送到用户浏览器并保存在客户端本地的一小块数据,它会在浏览器下次向同一服务器再发起请求时被携带并发送到服务器上。通常,它用于告知服务端两个请求是否来自同一浏览器,如保持用户的登录状态。Cookie使基于无状态的HTTP协议记录稳定的状态信息成为了可能。

Cookie 的工作流程:
#第一次请求过程:
(1)浏览器第一次发送请求时,不会携带任何cookie信息
(2)服务器接收到请求之后,发现请求中没有任何cookie信息
(3)服务器生成和设置一个cookie,并将此cookie设置通过set_cookie的首部字段保存在响应报文中返回给浏览器
(4)浏览器接收到这个响应报文之后,发现里面有cookie信息,浏览器会将cookie信息保存起来

#第二次及其之后的过程:
(1)当浏览器第二次及其之后的请求报文中自动 cookie的首部字段携带第一次响应报文中获取的cookie信息
(2)服务器再次接收到请求之后,会发现请求中携带的cookie信息,这样的话就认识是谁发的请求了
(3)之后的响应报文中不会再添加set_cookie首部字段

Cookie主要用于以下三个方面:
(1)会话状态管理(如用户登录状态、购物车、游戏分数或其它需要记录的信息)
(2)个性化设置(如用户自定义设置、主题等)
(3)浏览器行为跟踪(如跟踪分析用户行为等)


Session指的是服务器上为每个客户端所开辟的独立存储空间,在其中保存的信息就是用于保存状态的。

每个session都有一个sessionId,这个ID存放有两种方式:
1、通过URL存取,比如:Java程序中,URL会带上一个jsessionId=xxxxxx等,这样每次重新请求的时候都传了sessionId给服务器,但此方式不安全,所以很少使用,所以一般session是依赖于cookie的,即如果浏览器禁用了cookie,则session无法实现

2、通过cookie存取(Tomcat默认如此),这种cookie是session cookie,区别于persistent cookies也就是我们常说的cookie,session cookie要注意的是存储在浏览器内存中,而不是写到硬盘上。程序一开始执行,服务器就生成一个sessionId并通过cookie携带客户端浏览器的缓存中,当下一次访问的时候,服务器先检测一下是否有这个cookie,如果有就取它的ID,如果没有就再生成一个。这就是为什么关闭浏览器之后,再进去session已经没有了,其实在服务器端session并没有清空,而是sessionId变了

sessionId通常在浏览器地址中是看不到的,但是当我们把浏览器的cookie禁止之后,Web服务器会采用URL重写的方式传递sessionId,这样就可以在地址栏看到sessionId了
session cookie不可以跨窗口使用,但可以跨同一个窗口的多个标签页。

session中有众多数据,只将session ID这一项可以通过cookie发送至客户端进行保留,客户端下次访问时,在请求报文中的cookie会自动携带session ID,从而和服务器上的session进行关联

session 的工作流程:
第一次请求:
(1)浏览器发起第一次请求的时候可以携带一些信息(比如: 用户名/密码) cookie中没有任何信息
(2)当服务器接收到这个请求之后,进行用户名和密码的验证,验证成功后则可以设置session信息
(3)在设置session信息的同时(session信息保存在服务器端) ,服务器会在响应头中设置一个随机的session id的cookie信息
(4)客户端(浏览器)在接收到响应之后,会将cookie信息保存起来(保存session id的信息)

第二次及其之后的请求:
(1)第二次及其之后的请求都会携带session id信息
(2)当服务器接收到这个请求之后,会获取到session id信息,然后进行验证
(3)验证成功,则可以获取session信息(session信息保存在服务器端)


Cookie和Session的相同点和区别:

Cookie和Session的相同点:cookie和session都是在服务器端生成的
 

Cookie和Session的区别

1、保存位置不同:
session将数据信息保存在服务器端,可以是内存,文件,数据库等多种形式。通过用户识别,可以调用所有服务器资源。
cookie将数据保存在客户端的内存或文件中。

2、存储大小不同:
单个cookie保存的数据不能超过4K。每个站点cookie个数有限制,比如IE8为50个、Firefox为50个、Opera为30个
session没有容量限制

3、规范不同:
cookie是有HTTP规范约束的。cookie是HTTP头的一个字段

cookie的预定义属性:
(1)Domain:标明cookie作用的域名
(2)Path:标明哪些目录接受cookie
(3)Expires:失效时间,具体的时间值
(4)Max-Age:最大生存时间,是到失效时间的秒数
(5)Secure:只允许在安全网络使用cookie
(6)HttpdOnly:禁止JavaScript调用cookie

session是非标准概念。没有相应的规范约束,不同的语言默认实现的方式不相同

4、传输量不同:
cookie会传输所有的cookie内容
session只需要传输一个Session ID就可以了

5、业务不同:
cookie更多的用于认识用户行为。比如这台计算机的用户访问了哪些页面
session则更多的用于识别用户本身。比如这个用户是不是已经登录了相应的服务、用户的这个行为应该拒绝还是执行。

6、具体实现不同:
cookie只能通过HTTP头设置与传输
session可以通过URL、Cookie、HTTP POST DATA等各种机制来实现。没有标准的统一格式。


7、安全性不同:
cookie存放在用户本地,可以被轻松访问和修改,安全性不高
session存储于服务器,比较安全

8、有效期不同:
会话期Cookie:基于内存保存,会话期Cookie是最简单的Cookie:浏览器关闭之后它会被自动删除,也就是说它仅在会话期内有效。
持久性Cookie:基于硬盘保存,和关闭浏览器便失效的会话期Cookie不同,持久性Cookie可以指定一个特定的过期时间(Expires)或有效期(Max-Age)。
cookie有会话cookie和持久cookie,生命周期为浏览器会话期的会话cookie保存在缓存,关闭浏览器窗口就消失
持久cookie被保存在硬盘,直到超过设定的过期时间

随着服务端session存储压力增大,会根据需要定期清理session数据


cookie缺点:
1、使用cookie来传递信息,随着cookie个数的增多和访问量的增加,它占用的网络带宽也越大
2、cookie并不安全,因为cookie是存放在客户端的,所以这些cookie可以被访问到,设置可以通过插件添加、修改cookie。所以从这个角度来说,我们要使用sesssion,session是将数据保存在服务端的,只是通过cookie传递一个sessionId而已,所以session更适合存储用户隐私和重要的数据

session 缺点:
1、不容易在多台服务器之间共享,可以使用session绑定,session复制,session共享解决
2、session存放在服务器中,所以session如果太多会非常消耗服务器的性能

  • 2
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一直在努力学习的菜鸟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值