Cookie 和 Session
一 Cookie 和 Session 的区别
cookie是web服务器发送给浏览器的一块信息,浏览器会在本地一个文件给每个web服务器存储cookie。以后浏览器在给特定的web服务器发送请求时,同时会发送所有为该服务器存储的cookie。
session是存储在web服务器的一块信息。session对象存储特定用户会话所需的属性及配置信息。当用户在应用程序的web页面之间跳转时,存储在session对象中的变量将不会丢失,而是在整个用户回话中一直存在下去。
1 cookie和session的不同点:
I 无论客户端怎么设置,session都可以正常工作,当客户端禁用cookie时将无法使用cookie
II 在存储的数据方面:session可以存储任意java对象,而cookie只能存储String类型
二 Session共享怎么做
1 服务器实现session共享或session复制,这种方式共享session是和服务器紧密相关的,比如webSphere和JBOSS在搭建集群时都可以实现session共享和session复制,但这种方式有个致命弱点,就是不好移植和扩展,如果需要更换服务器,那么就需要修改服务器的配置。
2 利用成熟的技术做session共享,比如12306用的gemfire,比如常用的缓存数据库redis和memorycache.这种方式比较简单,但严重依赖第三方,如果第三方服务器应用出现问题,那么将是应用的灾难。
3 将session维护在客户端,很容易想到利用cookie,但是客户端存在风险,数据不安全,而且可以存放的数据量比较小,所以将session放在客户端还需要对session中的信息进行加密。
三 在单点登录中如果cookie被禁用了怎么办?
单点登录的原理是后端生成一个sessionID,然后设置到cookie,后面所有的浏览器访问都会带上cookie,然后服务器从cookie中获取到sessionID,再查询到用户信息。所以,保持登录的关键不是cookie而是cookie保存和传输的sessionID,其本质是能获取到用户信息数据。除了cookie,通常还是要http的请求头来传输,但这个请求头浏览器不会像cookie一样自动携带,而是需要手动处理。

浙公网安备 33010602011771号