session和cookie的区别
(1)存储位置不同
cookie在客户端浏览器
session在服务器
(2)存储容量不同
cookie<=4K,一个站点最多保留20个cookie
session没有上限
(3)存储方式不同
cookie只能保存ASCII字符串,并需要通过编码方式存储为Unicode字符或者二进制数据
session中能存储任何类型的数据,包括并不局限于String、integer、list、map等
(4)隐私策略不同
cookie对客户端是可见的,不安全
session存储在服务器上,安全
(5)有效期不同
开发可以通过设置cookie的属性,达到使cookie长期有效的效果
session依赖于名为JESSIONID的cookie,而cookie JSESSIONID的过期时间默认为-1,只需关闭窗口该session就会失效,因而session达不到长期有效的效果
(6)跨域支持上不同
cookie支持跨域
session不支持跨域
客户端禁止cookie,如何继续使用session
一般默认情况下,在会话中,服务器存储 session 的 sessionid 是通过 cookie 存到浏览器里。
如果浏览器禁用了 cookie,浏览器请求服务器无法携带 sessionid,服务器无法识别请求中的用户身份,session失效。
但是可以通过其他方法在禁用 cookie 的情况下,可以继续使用session。
通过url重写,把 sessionid 作为参数追加的原 url 中,后续的浏览器与服务器交互中携带 sessionid 参数。
服务器的返回数据中包含 sessionid,浏览器发送请求时,携带 sessionid 参数。
通过 Http 协议其他 header 字段,服务器每次返回时设置该 header 字段信息,浏览器中 js 读取该 header 字段,请求服务器时,js设置携带该 header 字段
session工作原理
客户端登录完成,在服务端产生一个session
服务端将sessionid返回给客户端浏览器。客户端将sessionid储存在浏览器的cookie中
当用户再次登录,会获得对应的sessionid,然后将sessionid发送到服务端请求登录,服务端在内存中找到对应的sessionid,完成登录,如果找不到,返回登录页面