session的做用范围(转)

session是在服务器端创建的,浏览器访问服务器会有一个jsessionid,浏览器端经过 jsessionid定位服务器端的session,session的建立和销毁由服务器端控制。当浏览器关闭后,session还存在在服务器端,只不 过你新开的浏览器去访问服务器会建立另外一个session,这个时候的jsessionid已经不同了。也就不能访问上一次的哪一个session里面的 内容了。
那服务器端session如何建的呢? 普通htm不会建立,jsp默认是建立的,只要你访问一个任何一个jsp就会建立(不过只建立一次),你关闭浏览器重新访问又会建立一个,这些建立的 session由服务器本身控制销毁,你也能够在服务器端代码中销毁。
session其实简单:
先request.getsession(),当已有一个session与前request相关时就返回对这个session的引用,当没有时就生成一 个.一个session在server经过一个sessionid来标识的。也就是说在一个server是不会有两个相同sessionid的 session.
那么session为何会和cookie扯在一块儿呢?
正如我所说对於一个session来讲它的sessionid就是其身份的标识。若咱们将这个sessionid保存到用户端,当同一个会话的后序请求来 时都将这个sessionid放在request 的header中(也就是咱们说的cookie)这样不就能够来验证这个request是否与以前的request是同一个会话了吗!
什么是会话呢?
咱们能够通俗一点理解。只要你的browers不关咱们就称这一系列的request与response为一个会话。一断你close就称这个会话已结 束。虽然会话结束但并不表明你的session就被destroy.由于session是存活在server上的。它的生命彻底由server来主宰 (web.xml中的设定).
虽然你的session还存活在server上但你已没法再取得它。由于j2ee的api只给咱们一种方法来取得与当前会话相关的session的引 用:request.getsession() or reqeust.getsession(boolean)
这也就是为会什么会有"当浏览器关session就结束"这个错误的说法了!
深入理解一下,  
一个常见的误解是觉得session在有客户端访问时就被建立,然而事实是直到某server端程序调用 HttpServletRequest.getSession(true)这样的语句时才被建立,
注意若是JSP没有显示的使用 <%@page session="false"%> 关闭session,
则JSP文件在编译成Servlet时将会自动加上这样一条语句HttpSession session = HttpServletRequest.getSession(true);
这也是JSP中隐含的session对象的来历。web

相关文章
相关标签/搜索