会话管理

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

会话管理

1、会话管理基本原理

实现会话管理的基本方式,如隐藏域(Hidden Field)、Cookie与URL重写(URL Rewriting)的实现方式。

1.使用隐藏域

隐藏域就是主动告知服务器多次请求间必要信息的方式之一。

这个方法不适合用于隐密性较高的数据。

隐藏域不是Servlet/JSP实际管理会话时的机制。

2.使用Cookie

Cookie是在浏览器存储信息的一种方式,服务器可以响应浏览器set-cookie标头,

浏览器收到这个标头与数值后,会将它以文件的形式存储在计算机上,这个文件

就称之为Cookie。一个常见的应用,自动登录。

Cookie可以设定存活期限,所以在客户端存储的信息可以活得更久一些。

Servlet本身提供了创建、设置与读取Cookie的API。如果你要创建Cookie,可以

使用Cookie类,创建时指定Cookie中的名称与数值,并使用HttpServletResponse

的addCookie()方法在响应中新增Cookie。

例:Cookie cookie = new Cookie("user","caterpillar");

cookie.setMaxAge(7*24*60*60);//单位是秒

response.addCookie(cookie);

HTTP中Cookie的设定是通过set-cookie标头,所以必须在实际响应浏览器之前

使用addCookie()来新增Cookie实例,在浏览器输出HTML响应之后再运行

addCookie()是没有作用的。

要取得浏览器上存储的Cookie,则可以从HttpServletRequest的getCookies()来取

得,这可取得属于该网页所属域(Domain)的所有Cookie,返回值是Cookie[]

数组。取得Cookie对象后,可以使用Cookie的getName()与getV alue()方法,分

别取得Cooke的名称与数值。

例:Cookie[] cookies = request.getCookies();

if(cookies != null){

for(Cookie cookie : cookies){

String name = cookie.getName();

String value = cookie.getV alue();

........

}

}

在Servlet3.0中,Cookie类新增了setHttpOnly()方法,可以将Cookie标示为仅用

于HTTP,这会在set-cookie标头上附和HttpOnly属性,在浏览器支持的情况下,

这个Cookie将不会被客户端脚本读取,可以使用isHttpOnly()来得知一个Cookie

是否被setHttpOnly()标示为仅用于HTTP。

3.使用URL重写

所谓URL重写(URL Rewriting),其实就是GET请求参数的应用,当服务器响

应浏览器上一次请求时,将某些相关信息以超链接方式响应给浏览器,超链接中

包括请求参数信息。

2、HttpSession会话管理

即使用户关掉浏览器接收Cookie的功能,HttpSession也可以改用URL重写断续其会话管理功能。HttpSession并非线程安全,所以必须注意属性设定时共享存取的问题。

1.使用HttpSession

进行会话管理,可以使用HttpServletRequest的getSession()方法取得HttpSession对

象。

getSession()方法有两个版本,另一个版本可以传入布尔值,默认是true,表示若尚

未存在HttpSession实例时,直接创建一个新的对象。若传入false,若尚未存在

HttpSession实例,则直接返回null。

最常使用的方法是setAttribute()与getAttribute(),invalidate()。

例:HttpSession session = request.getSession();//取得会话

session.setAttribute("name",value);//存储会话值

(简写:request.getSession().setAttribute("name",value);)

——————————————————————————

HttpSession session = request.getSession();//取得会话

session.getAttribute("name");//取得会话值

Session.invalidate();//使HttpSession失效

2.HttpSession会话管理原理

使用HttpSession进行会话管理十分方便,让Web应用程序看似可以“记得”浏览

器发出的请求,连接数个请求间的关系。但无论如何,Web应用程序其于HTTP

协议的事实并没有改变,实际上如何“得知”数个请求之间的关系,这件工作是由

Web容器帮你执行。

尝试运行HttpServletRequest的getSession()时,Web容器会创建HttpSession对象,

关键在于每个HttpSession对象都会有个特殊的ID,称为Session ID,你可以执行

HttpSession的getId()来取得Session ID。这个Session ID默认会使用Cookie存放

在浏览器中。在Tomcat中,Cookie的名称是JSESSIONID,数值则是getId()所取

得的Session ID。

由于Web容器本身是执行于JVM中的一个Java程序,通过getSession()取得

HttpSession,是Web容器中的一个Java对象,HttpSession中存放的属性,自然也

就存放于服务器端的Web容器之中。每一个HttpSession各有特殊的Session ID,

相关文档
最新文档