一、Cookie
Cookie是存储在客户端的,两个版本,version-0和version-1
1.Cookie version-0 的属性
NAME = VALUE : 这里的Name就是我们日常说的key,value就是我们存储的数据,Name不能和其他的name相同
Expires :过期时间,在设置的某个时间点cookie就会失效
Domain:域名
Secure:如果设置了此属性,那么只有在SSH连接时才会传回Cookie
2.Cookie version-1 的属性,只列举和version-0不一样的属性
Max-age:最大失效时间时间,代替version-0中的expires,这个参数的单位是秒,意思是*秒后Cookie过期
Port:端口,在访问某端口时候传回Cookie,支持多个,用“,”隔开即可
Version:如果设置setCookie2属性或者设置此属性为1或者使用version-1中的属性,那么就是version-1,如果使用setCookie属性,则version-0
Discard:在会话结束后是否丢弃该cookie,默认fasle
Comment:注释
CommentUrl:Url注释
2.使用Cookie的限制
各种浏览器对Cookie的支持大概都是50个Cookie/域名,4000多个字节
二、session
我们的应用如果把用户的一些信息存储到cookie中的话,那么每次浏览器访问服务端都会带着cookie,且不说cookie的限制,这样做会增加网络中数据的传输量,而且,cookie在客户端的浏览器是可以查看的,如果一些登录信息存放到cookie中,那么其他人也可以通过这台计算机的浏览器中的cookie查看其他用户的用户信息,正好,session可以解决这个问题。
session是存储在服务器端的会话,我们可以通过一个ID来获取session,然后把这个ID存储在cookie中,这就是我们常说的JSESSIONID。
1.cookie和session配合使用
session和cookie有3种方式配合使用
(1)如果客户端和服务器支持cookie,那么在请求时候,会自动带上响应的cookie进行访问。(会按照cookie的作用域选择应该 传输的cookie)这种方式是优先的
(2)基于URL Path Parameter实现(domain:path/action;a=1;b=2?c=3,其中a,b为URL Path Parameter)
(3)基于SSL,默认不支持,需要在tomcat中配置
2.session是如何工作的
(1)接受一个请求,先解析url path parameter中的JSESSIONID(web.xml中cookie-config下的name属性就是JSESSIONName,可以自行修改),解析出来JSESSION
(2)如果客户端和服务器支持cookie,那么从cookie中拿到JSESSIONID并覆盖(1)中的JSESSIONID
(3)通过JSESSIONID获取SESSION,如果为空则重新创建一个并放入Manager中管理
(4)根据这个SESSION id 创建一个cookie,并设置到http头中
(5)SESSION的生命周期由服务端管理,也就是tomcat的session Manager
三、安全性对比
1.cookie存储在客户端浏览器中,可以被查看和修改,所以cookie安全性比较低
2.session存储在服务器端,所以安全性更高一些,可以存储重要的数据。
四、分布式session
现在的项目基本都使用负载均衡,比如nginx作为负载均衡服务器,那么就会产生session一致性问题。
建议将session存入缓存集中式管理,比如:spring-session-redis