Session Cookie

Cookie:
setPath():访问该路径时才会带cookie,默认为当前servlet所在目录。
setDomain():第三方cookie,浏览器默认阻止这种cookie写入。
浏览器一般只存放300个cookie,每个站点最多存放20个cookie,每个cookie的大小最大为4kb。

Session:
session就是一系列服务器和用户间的通讯。
session的建立是从某一用户向服务器发第一个请求开始,而以用户显式结束或session超时为结束。 
sessionID: 
1.当一个用户向服务器发送第一个请求时,服务器为其建立一个session,该session具有一个唯一标志; 
2.该用户随后的所有请求都包括这个标识号。服务器校对标识号判断请求属于哪个session。实现机制之所以不使用IP作为标识,因为很多机器是通过代理服务器方式上网, 没法区分每一台机器。
对于sessionID,有两种方式实现:cookie和URL重写。
如果用户禁用浏览器cookie,可以通过url重写的方式存储sessionID;
如果用户浏览器支持cookie,同时也通过URL重写的方式存储了sessionID,实际上后者不会执行。

关于Session机制的误解:只要关闭浏览器,session就消失了​ (1)这个说法是错误的,大部分session机制都使用cookie来保存sessionID,因为cookie没有设置存储时间而是存储在浏览器内存里,当浏览器关闭时,cookie消失,所以浏览器里的session id也就消失了,再次连接服务器时也就无法找到原来的session。 (2)如果通过重写cookie将cookie的有效期设为30分钟(小于等于失效时间),则再次打开浏览器仍然能找到原来的session。但是当关闭浏览器的时间距离客户端上一次使用session的时间超过session失效时间,服务器认为客户端已经停止了活动,就会删除session以节省存储空间。

request.getSession(false); 不创建新的session。

如果用户禁用cookie,可以通过url重写实现session机制:
对每一个需要的url进行重写,使url后面附带sessionID。
这种情况下,即用户阻止cookie,虽然进行url重写,但关闭再打开浏览器时无法找回原来的session。

在IE8及以后,多个浏览器共用一个进程PID,所以多个浏览器可以实现Session的共享。
测试cookie时,主机名改为127.0.0.1。

猜你喜欢

转载自blog.csdn.net/tichgd/article/details/80335360