Session特点:
1.Session保存在服务器端,为了获得更高的存取速度,一般把Session保存在内存当中;
2.每个用户都有一个独立的Session,为了避免大量用户访问服务器导致内存溢出,Session内的消息应当尽量精简;
3.Session在用户第一次访问服务器时创建,需要注意的是只有访问JSP,Servlet等程序时才会创建Session,单纯访问图片,HTML等静态资源时不会创建,
如果尚未创建Session,可使用request.getSession(true)强制创建;
4.Session上传后,只有用户继续访问,服务器就会更新Session的最后活跃时间,并维护该Session,对于用户,无论其访问时有没有读写Session,服务器都会认为Session活跃了一次;
5.为防止内存溢出,服务器会将长期不活跃的的Session从内存中删除,即设置超时时间,超时时间内用户若没有继续访问,该Session将失效
Session与Cookie
如何标明用户访问了浏览器,以使之前创建的Session继续存活呢?HTTP协议是无状态的,即无法标明,于是,这就得依靠Cookie了,
服务器想用户发送一个名为JSESSIONID的Cookie,其值为Session的id,用户访问浏览器时头信息内包含此Cookie,服务器依靠此Cookie判断是否为同一用户
此Cookie由服务器端生成,其maxAge属性一般为-1,表示仅当前浏览器内有效,并且各浏览器窗口内不共享,关闭浏览器则失效,因此同一机器的两个浏览器窗口访问服务器时,会生成两个不同的Session。但由浏览器窗口内的链接、脚本等打开的新窗口会共享
父窗口的Cookie,因此共享一个Session。
如果客户端将Cookie禁用,或者不支持Cookie怎么办?
使用URL重写,原理是将Session中的id重写入url中,服务器解析重写的url获取id,这样即使客户端不支持Cookie,也能够通过url获取id