1 会话概念:简单的理解,当你打开浏览器,然后点击超链接,访问服务器资源,最后断开链接就是一次会话。
2 Cookie常用API:
创建Cookie:Cookie cookie = new Cookie(String name,String value),
设置Cookie存活时间:cookie.setMaxAge();
添加cookie到客户端:response.addCookie(cookie);【上面三个一般都是配套使用的】
得到所有的Cookie: Cookie[] cookies = request.getCookies();【请注意返回的是Cookie[]】
得到Cookie的名字和值:cookie.getName,cookie.getValue
让cookie死亡可以设置Cookie的存活时间为0;
3 Cookie细节和缺点
* 更新Cookie必须保证Cookie的名一致,否则为添加新的Cookie
* 一个浏览器可以接收多个Web站点的Cookie信息
* 一个浏览器存发Cookie的数目和容器有限
* 通过程序方式删除Cookie的name和path要一致,其中path默认即当前web应用名,比例/day06
Cookie的缺点:1.Cookie只能接受String类型的参数;2.安全级别低,用户可以自行删除Cookie
4 HttpSession常用API
获得HttpSession: HttpSession session = request.getSession(),
获得session的ID:sessin.getId();
绑定信息到session:session.setAttribute("Name",username)
转发:RequestDispatcher rd = request.getRequestDispatcher("/Demo42");
rd.forward(request,response);
5 HttpSession细节和缺点
a)在servlet中,只能request.getSession()才能在服务端创建与之对应的HttpSession
b)request.getSession()有二义性:
i)创建HttpSession,无->有
ii)查询已存在的HttpSession,有->有
iii)创建HttpSession时,可以使用二种方式
* request.getSession():返回值必须有HttpSession(旧,新HttpSession)
* request.getSession(false) :返回值要么为旧HttpSession,要么为null值,但不会报错
c)在默认情况下,每个浏览器独享HttpSession,关闭后再打开,不能共享原HttpSession中的数据
d)可以以手工方式写一个名为JSESSIONID的Cookie,这样可以在多个浏览器中共享原HttpSession中的数据
e)HttpSession的底层可以基于二种方式
>>Cookie形式
>>?jsessionid=******(即URL重写)
缺点:
a)HttpSession受限于web服务器的运行内存空间
解决方案:使用web服务器自带的挂起和激活功能来解决HttpSession空间受限的问题
b)创建HttpSession的代码具有二义性,慎用
6 案例
1)显示用户最近浏览器过的图书
2)购物车系统V1版
3)用户登录系统V1版
7 HttpSession如何销毁
8 什么样的场景下选用不同的域对象[request/session/context]