当前位置:文档之家› 第5章 会话与状态管理

第5章 会话与状态管理


HttpSession接口中的方法
getId() 返回与当前HttpSession对象关联的会话标识号 getCreationTime() 返回当前HttpSession对象的创建时间 getLastAccessedTime() 返回当前HttpSession对象上一次被访问的时间 setMaxInactiveInterval() 设置当前HttpSession对象可空闲的以秒为单 位最长时间 getMaxInactiveInterval() 返回当前HttpSession对象可空闲的以秒为单 位最长时间 isNew() 返回当前HttpSession对象是否是新创建的 invalidate() 强制当前HttpSession对象无效 setAttribute() 将一个对象与一个名称关联后存储进当前的HttpSession对 象中 getArrtibute() 从当前HttpSession对象中返回指定名称的属性对象 removeAttribute() 从当前HttpSession对象中删除指定名称的属性 getAttributeNames() 返回一个包含当前HttpSession对象中的所有属性 名的Enumeration对象
什么是Cookie
Cookie是一种在客户端保持HTTP状态信息的技术,Cookie是 在浏览器访问WEB服务器的某个资源时,由WEB服务器在 HTTP响应消息头中附带传送给浏览器的一片数据,WEB服务 器传送给各个客户端浏览器的数据是可以各不相同的。浏览器 可以决定是否保存这片数据,一旦WEB浏览器保存了这片数据, 那么它在以后每次访问该WEB服务器时,都应在HTTP请求头 中将这片数据回传给WEB服务器。 WEB服务器通过在HTTP响应消息中增加Set-Cookie响应头字 段将Cookie信息发送给浏览器,浏览器则通过在HTTP请求消 息中增加Cookie请求头字段将Cookie回传给WEB服务器。一 个Cookie只能标识一种信息,它至少含有一个标识该信息的名 称(NAME)和设置值(VALUE)。
启动Tomcat并查看显示的结果
启动Tomcat并查看显示的结果
查看客户端保存的Cookie文件
C:\Documents and Settings\Administrator\Cookie\administrator@lesson5[1].txt date "Wed Nov 28 08:49:08 CST 2007" localhost/lesson5/ 1024 4099348992 29970473 2075087792 29897048 * count 2 localhost/lesson5/ 1024 1834381696 29970474 4109307792 29897048 *
Cookie在浏览器与WEB服务器之间传送的过程
在Servlet程序中使用Cookie
ServletAPI中提供了一个javax.servlet.http.Cookie类来 封装Cookie信息,在HttpServletResponse接口中定义了 一个addCookie方法来向浏览器发送Cookie信息,在 HttpServletRequest接口中定义了一个getCookies方法来 读取浏览器回送的Cookie信息。 Cookie类只一个如下的构造方法:
会话状态
用户的登录账户和订购的产品就是会话的状态信息
如何实现有状态的会话
Cookie Session
Cookie
什么是Cookie Cookie的特点 Cookie在浏览器与WEB服务器之间传送的过程 在Servlet程序中使用Cookie Cookie的综合实例
encodeURL()
Cookie类的方法:
getName() public Cookie(String name,String value)
setValu
setMaxAge()与getMaxAge()
用于设置和返回Cookie的值
用于设置和返回Cookie在浏览器客户机上保持有效的秒数
等对象中都可以存储对象,我们应注意区分存储在它们里面的 对象的作用范围。
Session的超时管理
会话的超时间隔可以在web.xml文件中设置: <session-config> <session-timeout>30</session-timeout> </session-config> 这里设置的时间值是以分钟为单位的。
Cookie的综合实例
编写CookieServlet的Servlet程序 修改web.xml 启动Tomcat并查看显示的结果 查看客户端保存的Cookie文件
编写CookieServlet的Servlet程序
response.setContentType("text/html;charset=gb2312"); PrintWriter out = response.getWriter(); Cookie[] cks = request.getCookies(); if (null == cks) { out.println("你是第1次登录"); Cookie dateCookie = new Cookie("date", new Date().toString()); dateCookie.setMaxAge(365 * 24 * 3600); Cookie countCookie = new Cookie("count", "1"); countCookie.setMaxAge(365 * 24 * 3600); response.addCookie(dateCookie); response.addCookie(countCookie); } else { for (int i = 0; i < cks.length; i++) { if (cks[i].getName().equals("count")) { cks[i].setMaxAge(365 * 24 * 3600); cks[i].setValue(String.valueOf(Integer.parseInt(cks[i].getValue()) + 1)); response.addCookie(cks[i]); out.println("你是第" + cks[i].getValue() + "次登录<br>"); } else { out.println("你的第一次登录日期:" + cks[i].getValue() + "<br>"); } } }
第5章 会话与状态管理
目标
Web应用中的会话与会话状态 Cookie Session Session的典型案例[购物车]
ServletAPI的层次结构
Servlet GenericServlet HttpServlet ServletConfig ServletContext RequestDispatcher
Session
什么是Session Session的跟踪机制 Session的超时管理 HttpSession接口中的方法 HttpServletRequest接口上的Session方法 利用URL重写实现Session跟踪 Session的综合实例
什么是Session
HttpServletRequest接口上的Session方法
Session是与每个请求消息紧密相关的, HttpServletRequest定义了一些与Session相关的方 法:
getSession()
返回与当前请求相关的HttpSession对象
isRequestedSessionValid()
使用Cookie可以将上一次请求的状态信息传递到下一 次请求中,但是如果传递的状态信息较多,将极大降低 网络传输效率和增大服务器端程序处理的难度,即使这 样,传递的信息量也是非常有限的。为此,各种服务器 端的开发方案都提供了一种将会话状态保存在服务器端 的技术,即Session技术。 ServletAPI规范中定义了一个HttpSession接口, HttpSession接口定义了各种管理和操作会话状态的方 法。一个客户端在Web服务器端对应一个各自的 HttpSession对象。
修改web.xml
<servlet> <servlet-name>cookieservlet</servlet-name> <servlet-class>lesson5.CookieServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>cookieservlet</servlet-name> <url-pattern>/cookie</url-pattern> </servlet-mapping>
返回一个指示请求消息中的SessionID是否有效
isRequestedSessionIdFromCookie()
判断SessionID是否是通过请求消息中的Cookie传递过来的
isRequestedSessionIdFromURL()
判断SessionID是否是通过请求的URL参数传递过来的
Cookie的特点
一个WEB站点可以给一个WEB浏览器发送多个 Cookie,这样,在WEB浏览器和WEB服务器之间 就可以使用多个Cookie来传递多种信息。为了防 止Cookie塞满客户机的硬盘,浏览器一般只允许 存放300个Cookie,每个站点最多存放20个 Cookie,每个Cookie的大小限制为4KB。如果没 有设置Cookie的有效时间,接受它的浏览器进程 只将该Cookie保存在自己的内存空间中,在该浏 览器进程关闭时,它里面保存的所有Cookie也将 随之消失。
相关主题