第十四天(Session)

来源:互联网 发布:it行业发展前景 编辑:程序博客网 时间:2024/06/07 12:07

session通过SessionID来区分不同的客户,session是以cookie或URL重写为基础的,默认使用cookie来实现,系统会创造一个名为JSESSIONID的输出cookie,这称之为session cookie,以区别persistent cookies

通常看不到JSESSIONID,但是当把浏览器的cookie禁止后,web服务器会采用URL重写的方式传递Sessionid


HttpSession 生命周期

1.什么时候创建HttpSession对象

对于JSP:

若当前的JSP是客户端访问WEB应用的第一个资源,且JSP的page指定的session属性为false,则不会创建Httpsession对象

若当前JSP不是客户端访问WEB应用的第一个资源,且其他页面已经创建了一个HttpSession对象,则会返回一个会话的HttpSession对象,而不会创建一个新的

对于Servlet

若Servlet是客户端访问的第一个WEB应用资源,则只有调用了request.getSession()或request.getSession(true)才会创建HttpSession对象:request.getSession().setAttribute("name", value);


session="false" 当前页面禁用session隐含变量,但可以使用其他的显式的HttpSession对象


销毁HttpSession

1.程序调用HttpSession.invalidate()

2.距离上一次收到客户端发送的session id时间间隔超过了session的最大有效时间

3.服务器进程被停止

注意:关闭浏览器只会使存储在客户端浏览器内存中的session cookie失效,不会使服务端的session对象失效


HttpSession的相关API

1.获取Session对象 request.getSession() request.getSession(boolean create)

2.属性相关的setAttribute getAttribute removeAttribute

3.使HttpSession失效的invalidate()

4.设置最大时效的setMaxInactiveInterval


URL重写

Servlet规范中引入了一种补充的会话管理机制,它允许不支持Cookie的浏览器也可以与WEB服务器保持连续的会话

将会话标识号以参数形式附加在超链接的URL地址后面的技术称为URL重写


<a href="<%= response.encodeURL("login.jsp")%>" >重新登陆</a>



开发时建议编写绝对路径:request.getContextPath()


如何避免表单的重复提交:在表单中做一个标记,提交到Servlet时,检查标记是否存在且是否和预定义的标记一致,若一致则受理请求,并销毁标记,若不一致或没有标记,则直接显示相应信息:重复提交(Session配合隐藏域)  参看并使用TokenProcessor类


使用HttpSession实现验证码,基本原理和表单重复提交一致


在原表单页面 将随机字符串放入到session中 并放在隐藏域中(验证码为输入框) 提交表单

在目标的Servlet中,获取session和表单中的值 比较两个值 若一致,受理请求且把session域中属性清除

若不一致,则通过重定向的方式返回原表单页面

0 0
原创粉丝点击