第五章:会话以及会话管理技术
1.会话概述
什么是会话:从打开浏览器,到访问网页,到最终关闭浏览器,整个过程就是一次会话。
会话的特点:包含多个请求,一次完整的会话针对一个用户。
会话管理技术:
第一种:cookie技术,客户端技术。
第二种:session技术,服务端技术。
购物车案例:买完商品后,加入购物车,买的商品存到什么对象比较合适?
1.使用request域对象保存商品信息
结论:使用request保存商品信息不可以,因为每次发送请求,都会产生一个新的请求对象
2.使用ServletContext域对象保存商品信息
结论:使用ServletContext对象保存商品信息可以,但不合理。
所以在开发中,保存会话过程中产生的数据,采用会话管理技术,也就是使用cookie和session技术来保存会话过程产生的数据。
2.Cookie对象
2.1什么是Cookie:
Cookie是一种会话管理技术,它是用来保存会话过程中产生的数据,然后在浏览器和服务器交互时,会使用cookie里面保存的数据
注意:首次访问服务器,浏览器不会携带cookie到服务端。
2.2 Cookie常用的api
2.2.1得到cookie对象:Cookie cookie=new Cookie(String key,String value);
2.2.2回写(响应)cookie到浏览器端:response.addCookie(cookie);
2.2.3得到cookie的名称:String key=cookie.getName();
得到cookie的值:String value=cookie.getValue();
2.2.4给cookie设置生命时长: setMaxAge(int scr)
比如:cookie.setMaxAge(60*60*24*7),说明cookie能活七天;
cookie分类:
第一类:会话级别cookie,浏览器关闭,cookie对象销毁了。
第二类:持久化cookie,通过setMaxAge这个方法来设置。
2.2.5给cookie设置路径,设置域名:
setPath(路径的url),setDomain(域名);
比如:域名就是服务器名称,比如说:wwww.baidu.com
2.2.6得到cookie:Cookie[] cookies=request.getCookies();
2.3显示用户的上次访问时间
实现步骤:
2.3.1判断是否是首次访问:
如果cookie里面有时间,说明就不是第一次访问
2.3.2如果是第一次访问,创建cookie,保存时间,把这个cookie回写到浏览器端
2.3.3如果不是第一次访问,把时间回写到浏览器,记住当前时间,把时间保存到cookie里面
3.Session对象
3.1什么是session
session是一种会话管理技术,session用来保存会话过程中的数据,保存的数据存储到服务器端。
session原理:基于cookie实现的,更确切的说是基于会话级别的cookie实现的
3.2HttpSession API
session常用方法:
》》》1.得到session的id(JESSIONID):getId();
》》》2.设置session的生命时长:setMaxInactiveInterval(int interval);
》》》3.销毁session:invalidate();
得到session:HttpSession session=getSession;
session域对象:作用范围一次完整的会话(包含多个请求)
》》》1.存值:setAttribute(String key,Object obj);
》》》2.取值:Object obj=getAttribute(String key);
》》》3.移除:removeAttribute(String key);
总结域对象:request域对象 session域对象 servletContext域对象,作用范围依次变大
request域对象:作用范围一次请求,通常和转发操作配合使用
session域对象 :作用范围一次会话,通常和重定向操作配合使用
servletContext域对象:作用范围整个项目,和重定向、转发操作都可以配合使用
3.3Session超时管理
session对象是有生命时长,它的默认存活时间是30分钟。
具体配置找Tomcat软件的conf下的web.xml文件下,如下:
30
立即销毁session对象:invalidate();
3.4实现购物车:
1.创建Book封装图书信息:Book
2.创建BookDB,模拟数据库,里面保存图书
3.提供图书的购买页面:ListBookServlet
4.添加购物车:PurcharseServlet
5.回显购物车图书信息:CartServlet
如果浏览器禁用了cookie,咱们的购物车功能就不能实现了,因为session是基于cookie实现的
解决方案:提示用户开启cookie
3.5实现用户登录
1.创建一个User类,封装用户名和密码
2.提供一个首页面,欢迎用户登录:IndexServlet
3.提供一个登陆的servlet:处理登录请求
4.提供一个退出的servlet:处理退出首页免的请求