Servlet规范之会话:Session和Cookie

零、Servlet规范API核心类图
一、会话概述
1、什么是会话?如同打电话
2、会话过程中主要解决的问题是什么?保持客户端各自的会话数据(最典型的就是购物)
3、解决办法:
Cookie:客户端技术.Set-Cookie响应头和Cookie的请求头
HttpSession:服务器端技术。服务器为每一个客户浏览器创建一个HttpSession对象。

二、Cookie
1、Cookie的属性:
name:名称。必须的
value:值。必须的
path:路径。可选的。默认值写cookie的那个程序的访问路径。
假如:向客户端写cookie的程序是:http://localhost:8080/day06/servlet/CookieDemo1
他的默认path:/day06/servlet
路径的特点:
当访问的资源地址是:http://www.itcast.cn/index.jsp  刚才写的cookie浏览器会不会带给服务器。不会(域名不一样)
当访问的资源地址是:http://localhost:8080/day06/abc/a.jsp 刚才写的cookie浏览器会不会带给服务器。不会(路径不一样)
当访问的资源地址是:http://localhost:8080/day06/a.jsp 刚才写的cookie浏览器会不会带给服务器。不会(路径不一样)
当访问的资源地址是:http://localhost:8080/day06/servlet/a/a.jsp 刚才写的cookie浏览器会不会带给服务器。会(startWith为true)
因此:如果一个Cookie的路径设置为了"/day06",意味着day06这个应用中得所有资源都可以访问到该Cookie。
domain:域。可选的。默认值写cookie的那个网站。
假如:向客户端写cookie的程序是:http://localhost:8080/day06/servlet/CookieDemo1
他的域名就是:localhost
maxAge:最大存活时间。可选的.默认是会话范围(cookie存在浏览器的内存中)。单位是秒。删除,设置时间为0.删除的cookie的path要注意。
comment:注释.可选的。
version:版本号。可选的。
2、服务器向客户端写Cookie
HttpServletResponse.addCookie(Cookie c)
浏览器对一个网站最多支持20个Cookie。
所有的Cookie个数最多支持300个。
每个Cookie的大小不能超过4Kb。
3、服务器端获取客户端带来的Cookie
Cookie[]  cs = HttpServletRequest.getCookies()

如何唯一确定一个Cookie:
domain+path+name
4、删除客户端指定的cookie:
定位要删除的cookie。把MaxAge改为0,就是删除该Cookie。

注意:cookie不能使用中文(目前)

三、Cookie案例:3个案例
四、HttpSession原理
1、HttpSession对象由服务器创建并保存在服务器的内存中。
2、HttpSession对象本身是一个域对象(内部维护了一个Map)
void setAttribute(String key,Object obj)
Object getAttribute(String key)
void removeAttribute(String key)
3、创建HttpSession的方法:
HttpSession HttpServletRequest.getSession():先查找属于你的HttpSession对象,没有才创建。有就是获取。
HttpSession HttpServletRequest.getSession(boolean b):如果b为true,与getSession()相同;如果b为false,只获取,若没有对应的HttpSession对象,返回null。

4、原理
服务器把HttpSession对象的ID(服务器负责产生且唯一的),以Cookie的形式(name是JSESSIONID,value是HttpSession的ID)写给客户端。
该Cookie的生命周期默认是浏览器进程;默认的path是当前应用。如果吧path改为应用的某一个目录下,session的范围是否变化。JSP中的session

响应:
Set-Cookie: JSESSIONID=CFA3C1B6690391EBD8686C55D3540B2B; Path=/day06
请求:
Cookie: JSESSIONID=CFA3C1B6690391EBD8686C55D3540B2B
五、HttpSession对象的状态
1、服务器端的HttpSession对象只有2中可能才会被销毁:
a、超时:默认30分钟。
通过web.xml可以进行配置
1
b、调用了HttpSession的invalidate()方法。

你可能感兴趣的:(JavaWeb)