文档详情

Cookie和Session详解.doc

发布:2017-11-21约2.29万字共13页下载文档
文本预览下载声明
会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话。常用的会话跟踪技术是Cookie与Session。Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端记录信息确定用户身份。本章将系统地讲述Cookie与Session机制,并比较说明什么时候不能用Cookie,什么时候不能用Session。 1.1? Session机制 除了使用Cookie,Web应用程序中还经常使用Session来记录客户端状态。Session是服务器端使用的一种记录客户端状态的机制,使用上比Cookie简单一些,相应的也增加了服务器的存储压力。 1..1? 什么是Session Session是另一种记录客户状态的机制,不同的是Cookie保存在客户端浏览器中,而Session保存在服务器上。客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上。这就是Session。客户端浏览器再次访问时只需要从该Session中查找该客户的状态就可以了。 如果说Cookie机制是通过检查客户身上的“通行证”来确定客户身份的话,那么Session机制就是通过检查服务器上的“客户明细表”来确认客户身份。Session相当于程序在服务器上建立的一份客户档案,客户来访的时候只需要查询客户档案表就可以了。 1..2? 实现用户登录 Session对应的类为javax.servlet.http.HttpSession类。每个来访者对应一个Session对象,所有该客户的状态信息都保存在这个Session对象里。Session对象是在客户端第一次请求服务器的时候创建的。Session也是一种key-value的属性对,通过getAttribute(String key)和setAttribute(String key,Object value)方法读写客户状态信息。Servlet里通过request.getSession()方法获取该客户的Session,例如: HttpSession session = request.getSession(); ??? // 获取Session对象 session.setAttribute(loginTime, new Date());? ??? // 设置Session中的属性 ??? out.println(登录时间为: + (Date)session.getAttribute(loginTime)); ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? // 获取Session属性 request还可以使用getSession(boolean create)来获取Session。区别是如果该客户的Session不存在,request.getSession()方法会返回null,而getSession(true)会先创建Session再将Session返回。 Servlet中必须使用request来编程式获取HttpSession对象,而JSP中内置了Session隐藏对象,可以直接使用。如果使用声明了%@ page session=false %,则Session隐藏对象不可用。下面的例子使用Session记录客户账号信息。源代码如下: 代码1.9? session.jsp %@ page language=java pageEncoding=UTF-8% jsp:directive.page import=com.helloweenvsfei.sessionWeb.bean.Person/ jsp:directive.page import=java.text.SimpleDateFormat/ jsp:directive.page import=java.text.DateFormat/ jsp:directive.page import=java.util.Date/ %! ??? DateFormat dateFormat = new SimpleDateFormat(yyyy-MM-dd); ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? // 日期格式化器 % % ??? response.setCharacterEncoding(UTF-8); ??? ??? // 设置request编码 ??? Person[] persons = {??? ??? ??? // 基础数据,保存三个人的信息 ??? ??? new Person(Liu Jinghua, password1, 34, dateFormat.parse ??? ??? (1
显示全部
相似文档