虽然Session保存在服务器,对客户端是透明的,它的正常运行仍然需要客户端浏览器的支持。这是因为Session需要使用Cookie作为识别标志。HTTP协议是无状态的,Session不能依据HTTP连接来判断是否为同一客户,因此服务器向客户端浏览器发送一个名为JSESSIONID的Cookie,它的值为该Session的id(也就是HttpSession.getId()的返回值)。Session依据该Cookie来识别是否为同一用户。
该Cookie为服务器自动生成的,它的maxAge属性一般为-1,表示仅当前浏览器内有效,并且各浏览器窗口间不共享,关闭浏览器就会失效。因此同一机器的两个浏览器窗口访问服务器时,会生成两个不同的Session。但是由浏览器窗口内的链接,脚本等打开的新窗口(也就是说不是双击桌面浏览器图标等打开的窗口)除外。这类子窗口会共享父窗口的Cookie,因此会共享一个Session。
如果客户端浏览器将Cookie功能禁用,或者不支持Cookie怎么办?例如,绝大多数的手机浏览器都不支持Cookie。Java Web提供了另一种解决方案:URL地址重写。
注意:新开的浏览器窗口会生成新的Session。子窗口除外。子窗口会共用父窗口的Session。
application全局变量,session是会话变量, 比如说:(1)session:声明一个session变量。打开一个网站,session就存在了, 更换页,只要是这个网站的页,session始终存在,当关闭这个网站的时候,session就结束了,这叫会话变量。。。 (2)application:声明一个application变量。不关你前台有多少客户打开该网站的页,有多少客户关闭该网站的页, 只要服务器端不关闭该网站,application始终存在