基于JSP搭建Web应用程序
第四章 会话跟踪
回顾 JSP如何处理客户端的请求? JSP内置对象? 请描述转发与重定向有何区别?
学习内容 为什么需要会话跟踪 Cookie技术 Session技术 作用域范围对象
能力目标 理解为什么要使用会话跟踪 掌握cookie的原理及应用 掌握session的原理及应用 掌握JSP内置对象的作用域范围
会话跟踪 什么是会话? 什么是会话状态? 为什么需要会话跟踪? 生活中:一次电话.一次取款过程 Web应用一次会话:一个客户端浏览器与web服务器之间连续发生的一系列请求和相应的过程 什么是会话状态? 会话状态是指Web服务器与浏览器在会话过程中产生的状态信息。 为什么需要会话跟踪? Http:”无状态”?
生活中的Cookie 浏览购物网站查看不同商品时,系统会自动记录已经浏览过的商品
什么是Cookie Cookie是由服务器生成 发送给客户端浏览器的一小段信息, 浏览器将其保存成某个目录下的文本文件中. 对特定对象(客户)的追踪,如:访问系统次数,最后访问时间,停留时间等 统计网页浏览次数 记录用户登录信息 实现个性化服务,如针对不同的用户偏好展示不同的内容等 安全性能 容易信息泄露
Cookie的应用 导入包 创建Cookie 写入Cookie 读取Cookie parameter:用于代表cookie的名称(key) value:用于表示当前key名称所对应的值 写入Cookie 读取Cookie <%@page import="javax.servlet.http.Cookie“%> Cookie newCookie=new Cookie("parameter", "value"); response.addCookie(newCookie) request.getCookies()
Cookie的应用 设置Cookie属性的常用方法 类型 方法名称 说 明 void setMaxAge(int expiry) 说 明 void setMaxAge(int expiry) 设置Cookie的有效期,以秒为单位 setValue(String value) 在Cookie创建后,对Cookie进行赋值 String getName() 获取Cookie的名称 getValue() 获取Cookie的值 int getMaxAge() 获取Cookie的有效时间,以秒为单位
JSP中应用Cookie 用户登录成功后,将用户信息保存到Cookie中,在页面读取Cookie并显示
JSP中应用Cookie ------从登录验证页面表单中获取用户名------ <% String username=reqeust.getParameter("username"); String password=request.getParameter(“pwd”); Cookie uname=new Cookie("uname", username); Cookie upwd=new Cookie(“pwd", password); response.addCookie(uname); Response.addCookie(upwd); ... ... %> -----在显示页面显示用户名--------------- <%//获取请求中的Cookie,以数组方式保存 Cookie cookies[ ]=request.getCookies(); //循环遍历数组,得到key=uname的Cookie for(int i=0;i<cookies.length;i++){ Cookie ucookie=cookies[i]; if(ucookie.getName().equals("uname”));//判断Cookie的名称 欢迎你:<%=ucookie.getValue() %>//获取key对应的value,输出显示 <% } %> 创建Cookie,使用response的addCookie方法保存Cookie 使用reqeust获取Cookie数组,通过cookie的名称获取对应的内容 演示示例:使用Cookie保存用户名称
生活中的访问控制 下载电子书时,系统会提示用户登录网站 点击下载, 系统转入登录页面 每次下载之前,系统如何判断用户是否已经登录?
如何实现访问控制 访问流程控制分析 1 2 系统如何保存不同用户的登录信息? 进入用户注册页面 否 用户登录 是否是注册用户 系统保存该用户的登录信息 进入欲访问的页面 是 进入用户登录页面 否 用户直接访问某个页面 2 系统是否保存了该用户登录信息 显示该页面内容 是 系统如何保存不同用户的登录信息? 使用JSP会话跟踪机制,可以维持每个用户的会话信息,也就是为不同的用户保存不同的数据
什么是JSP的会话 一个会话就是浏览器与服务器之间的一次通话,包含浏览器与服务器之间的多次请求、响应过程 session是JSP内置对象,与浏览器一一对应,允许用户存储和提取会话状态的信息 请求 1 浏览器 响应 1 session对象 请求 2…n 浏览器 响应 2…n session对象 浏览器关闭,本次会话结束
JSP内置对象session session对象用来存储有关用户会话的所有信息,这些信息保存在服务器端 session对象常用方法: 类型 方法名称 说 明 void setAttribute(String key,Object value) 以key/value的形式保存对象值 Object getAttribute(String key) 通过key获取对象值 String getId() 获取session对象的编号 invalidate() 设置session对象失效
使用session实现访问控制 在控制页面获取用户请求的登录信息进行验证 ------登录处理页面的代码片断------ <% if (rs.next()) { //如果是已注册用户 session.setAttribute("LOGINED_USER", loginedUser); response.sendRedirect("index.jsp"); } else { response.sendRedirect("login.html"); } %> 在session中存放用户登录信息
使用session实现访问控制 在新闻发布系统新闻发布页面增加登录验证 如果session中不存在该用户的登录信息,转入登录页面 <% User user = (User) session.getAttribute("LOGINED_USER"); if (user == null) { response.sendRedirect("login.jsp"); } %>
Cookie与session的比较 session是在服务器端保存用户信息,Cookie是在客户端保存用户信息
JSP内置对象的范围 对象的范围 范围的分类 范围决定了JSP是否可以进行对象访问 名称 说 明 page范围 request范围 说 明 page范围 在一个页面范围内有效,通过pageContext对象访问该范围内的对象 request范围 在一个服务器请求范围内有效,与客户端请求绑定一起 session范围 在一次会话范围内容有效,在会话期间与session绑定的对象皆属于该范围 application范围 在一个应用服务器范围内有效,当应用服务启动后即创建该对象,并向所有用户所共享 演示示例:对象范围的测试
JSP内置对象的范围 名称 作用域范围 说 明 page request session application 单一JSP页面的范围 说 明 page 单一JSP页面的范围 只能在创建对象的页面内访问,在服务器跳转后失效 pageContext.setAttribute(“name”,value);pageContext.getAttribute(“name”); request 一次请求范围有效 页面跳转后,设置的内容依然被保,request.setAttribute(“name”,value);request.getAttribute(“name”); session 一次会话有效期内 重定向后,也可以访问,关闭浏览器失效session.setAttribute(“name”,value);session.getAttribute(“name”); application 整个web应用程序的生命周期内 关闭浏览器,重新打开,也可以访问到
本章总结 会话跟踪技术 cookie和session的区别 对象的四种作用域范围 保存在session中的信息,当浏览器关闭后即失效,保存在cookie中的信息可以长期存在。 因为用户可以删除cookie,所示一般在cookie中保存一些不重要的信息,重要的信息保存在session中 对象的四种作用域范围 page、request、session和application