对cookie和session的理解

什么是Cookie

cookie是一些key-value的集合。

用户通过HTTP第一次访问一个服务器的时候,服务器就会把一个cookie返回给客户端,保存在客户端的内存或者硬盘中,同一个用户下次再访问服务器时,就把cookie带上,这样服务器就认出这个用户了。

cookie被加在http头中,作为其中的一个字段,其实就是一串字符串的形式。像这样:

Set-Cookie: userName=”wdx”; Domain=”abc123.net”;

一个cookie有多个属性,除了第一个Name之外,其他的属性名都是固定的,是关于cookie的过期时间、生成域名、路径之类的属性。下面是cookie 1.0 版本的属性介绍:

属性项 属性项介绍
NAME=VALUE 可以设置保存的key-value,NAME不能和下面的属性重名
Version 默认是0,如果设置为1,那么cookie就要符合RFC2109规范
Comment 注释,用户说明该cookie的用途
CommentURL 服务器为此cookie提供的URL注释
Discard 是否在会话结束后丢弃该cookie项,默认是false
Domain 生成该cookie的域名
Max-Age 最大失效时间,1.0版本是设置为多少秒后失效
Port 该cookie在什么端口下可以回传服务器,多个端口用逗号隔开
Secure 若设置此属性,则cookie只在SSH连接时回传


所以我们如果要保存多个key-value,就需要创建多个cookie。而用户每次访问服务器都会带着它们,这就造成传输数据量的增加,所以每个浏览器都会限制cookie的数量和大小。

什么是Session

由于cookie有数量和大小的限制,为了解决这个问题,session出现了。

有了session之后,用户只需要携带一个默认名为 JSEESIONID 的cookie去访问服务器,它的 value 是每个用户的唯一ID。

用户第一次访问服务器,会生成这个cookie,并且在服务器端实例化一个 HttpSession 对象,这个对象其实就是个Map,可以用来保存用户的信息。下一次用户再访问服务器,就可以根据ID找到这个session,并读取其中保存的用户信息。

两者的安全性

cookie因为是保存在客户端,所以可以在本地查看,甚至修改,因此安全性不高。

相对来说session就更安全,因为用户信息是保存在服务器端的,发给客户端的只是一个用户ID。

你可能感兴趣的:(web)