Http协议的Cookie


Cookie和Session会使用两个HTTP头, Set-Cookie` and `Cookie

服务器端会使用Set-Cookie ,需要注意的是Set-Cookie 携带多个Cookie时,需要用 逗号 ,分隔,每个Cookie 是 name=value的形式,每个Cookie的属性用分号;隔开。

例如:

Set-Cookie: user_id=5; Expires=Fri, 5 Oct 2018 14:28:00 GMT; Secure; HttpOnly, remember_me=true

包含两个Cookie : user_id= 5 , 它的属性有过期时间,Secure属性(表示该Cookie客户端只能发送给HTTPS 协议的服务端),HttpOnly属性表示禁止js读取Cookie,可以防止XSS攻击。

第二个Cookie是remember_me=true ,采用默认属性。

客户端会使用Cookie头,每个Cookie用分号分隔:

例如:

Cookie: user_id=5; remember_me=true
Cookie

 Cookie就是当一个用户通过HTTP协议访问服务器时,服务器会将一些Key/Value键值对返回给客户端浏览器。这样做的目的是因为HTTP是无状态的协议,本次请求和下一次请求,服务器如何确认是同一个用户,就可以用Cookie的方式携带一些信息。

Cookie使用流程

Cookie产生和使用的流程是:

1.客户端第一次访问指定的URL

2.服务端接收请求,查看Cookie请求头,如果已经有需要的信息,说明之前访问过。

如果没有,说明是第一次访问,则会在服务端将业务需要的数据通过Set-Cookie响应头

返回给客户端。

3.浏览器收到响应后,会自动保存服务端设置的Set-Cookie并和URL对应。

4.下次浏览器访问时,浏览器会检查Cookie的有效期和相关限制,将该URL对应的所有Cookie设置在请求头Cookie中,传给服务器。

  • Chrome中查看Cookie方法:

设置——》高级——》网站设置——》Cookie和网站数据

在这里插入图片描述

这样就可以解决客户端和服务端多次请求,身份的认证问题。但是Cookie在客户端保存,不安全,并且有数量限制。

浏览器版本Cookie数限制Cookie总大小限制
Chrome50个/每个域名大于80000字节
FireFox50个/每个域名4097个字节
Cookie如何过期?

1.服务端可以设置Cookie的过期时间

例如:

cookies
  .set(:current_user_id, 123)
  .expires(1.year.from_now)
  .http_only(true)

这样,客户端就会在过期时间到了,删除浏览器中保存的Cookie。

在这里插入图片描述

2.如果没有设置过期时间,则会在浏览器关闭后,清空该Cookie

Session

 Session并非是HTTP协议中的内容,Session是为了解决Cookie存证的一些问题,比如安全和大小限制等,将数据保存在服务端,交互时,只通过Cookie传递SessionId,来保证数据的安全性 和存储的灵活性。

 Session允许同一个客户端每次和服务端交互时,不需要每次都传回所有的Cookie值,而是只要传回一个ID,这个ID是客户端第一次访问服务器的时候生成的,而且每个客户端是唯一的。这样每个客户端就有了一个唯一的ID,客户端只要传回这个ID就行了。这个ID通常是NAME为JSESSIONID的一个Cookie。

Session的使用流程是:

1.客户端第一次访问服务器

2.服务器判断是否携带了值类似JSESSIONID=42D1ED74CB19755C0C26FBA8C2B73B4A的Cookie,如果携带了,会通过对应的JSESSIONID查找对应的Session对象,Session对象中存了该客户端的信息。如果没有携带,Tomcat会根据随机数+时间+jvmid生成一个JSESSIONID,放入Set-Cookie响应头

在这里插入图片描述

3.客户端保存Cookie,之后每次请求该URL时携带Cookie 值为JSESSIONID

在这里插入图片描述

JAVA中Session的生成过程

在这里插入图片描述

Session过期时间

Java中Session的默认过期时间是30分钟,过期后,会删除Session对象。

可以通过设置修改Session过期时间。

小结

Cookie是HTTP协议中的内容,Session的使用也是基于Cookie,Session可以将数据保存在服务器端的内存,或者持久化到磁盘,或使用redis等存储。

Cookie的内容较多,建议详细内容查看下面的链接

https://developer.mozilla.org/en-US/docs/Web/HTTP/Cookies
http://browsercookielimits.squawky.net/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值