聊聊Cookie和HttpSession

在servlet规范中,常用以下两种机制完成会话跟踪:
--Cookie
--Session
下面我们就聊聊Cookie和HttpSession

一、Cookie
1、完成会话跟踪的一种机制:采用的是在客户端保持HTTP状态信息的方案。
2、Cookie是在浏览器访问WEB服务的某个资源时,由WEB服务器在HTTP响应消息头中附带传送给浏览器的一个小文本文件。
3、一旦WEB浏览器保存了某个Cookie,那么它在以后每次访问该WEB服务器时,都会在HTTP请求头中将这个Cookie回传给WEB服务器。

用一小段代码演示一下:
写一个Cookie.jsp,简单的测试一下:

<%
//创建一个cookie对象
Cookie cookie=new Cookie("name","ymfwj");

//调用response的一个方法把Cookie返回给客户端
response.addCookie(cookie);
%>



然后运行Cookie.jsp,

第一次运行的时候,结果如下:

聊聊Cookie和HttpSession_第1张图片

聊聊Cookie和HttpSession_第2张图片

刷新一下,再次发送一次请求:
聊聊Cookie和HttpSession_第3张图片

给出cookie的传送过程示意图:
聊聊Cookie和HttpSession_第4张图片

4、底层的实现原理:WEB服务器通过在HTTP响应消息中增加SET-Cookie响应头字段将Cookie信息发送给浏览器,浏览器则通过
在HTTP请求消息中增加Cookie请求头字段将Cookie字段将Cookie回传给WEB服务器。


 二、Cookie的相关的API
 
 1向客户端浏览器写入Cookie
 ①、创建一个Cookie对象
 Cookie cookie=newCookie("name","ymfwj");
 
 ②、setMaxAge:设置Cookie的最大时效,以秒为单位,若为0,表示立即删除该Cookie,
 若为负数,表示不存储改Cookie,若为正数,表示该Cookie的存储时间。
 例如:cookie.setMaxAge(20);//存储20秒后失效
 
 ③、设置Cookie的作用范围:可以作用当前目录和当前目录的子目录,但不能作用于当前目录的上一级。
 cookie.setPath(request.getContextPath());
 
 ④、调用response的一个方法把Cookie传给客户端
 response.addCookie(cookie);
 
 2、从浏览器读取Cookie
 ①、获取Cookie
Cookie [] cookies=request.getCookies();
if(cookies!=null&&cookies.length>0){
for(Cookie cookie:cookies){
//②、获取Cookie的name和value
out.print(cookie.getName()+":"+cookie.getValue());
}
}
 ③、会话cookie和持久cookie
  a、如果不设置过期时间,则表示这个cookie生命周期为浏览器会话期间,只要关闭浏览器窗口,cookie就消失了。
这种生命周期为浏览器会话期的cookie被称为会话cookie。会话cookie一般不保存在硬盘上卫视保存在内存里。
  b、如果设置了过期时间,浏览器会把cookie保存在硬盘上,关闭或再次打开浏览器,这些cookie依然有效指导超过设定的过期时间。
  
三、HttpSession(记得我第一次是用这个是为了存储登录者的信息。。。。)
1、HttpSession:在服务器端保持Http状态信息的方案,和其对应的是Cookie


2、产生HttpSession对象的过程:当程序需要为某个客户端的请求创建一个session时,服务器首先检查这个客户端的请求里是否包含了一个session标识
(及sessionId),如果已经包含一个sessionId则说明以前已经为此客户创建过session,服务器就按照sessionId把这个session检索出来使用。


3、使用Cookie来跟踪session:session通过sessionId来区分不同的客户,session是以cookie或url重写为基础,默认使用cookie来实现,
系统会创造一个名为JSESSIONID的输出cookie,这称之为session cookie,session cookie是存储于浏览器内存中的,并不是写在硬盘上的,通常
看不到JSESSIONID

四、HttpSession周期
1、创建一个HttpSession对象:
一个常见的错误是以为session在有客户端访问时就被就被创建(若第一次访问某WEB应用的一个jsp页面,且改jsp页面的page指定的session属性为false)
①、某server端程序(如servlet)调用HttpServletRequest.getSession(true)或者HttpServletRequest.getSession()这样的语句时才会被创建。
②、若第一次访问某WEB应用的一个jsp页面,且该jsp页面的page指定的session属性为true,服务器会自动为该页面分配一个HttpSession对象。

2、销毁HttpSession对象:
①、程序调用HttpSession.invalidate()
②、距离上一次收到客户端发送的session id时间间隔超过了session的最大有效时间
③、服务器进程被停止(或当前WEB应用被卸载)
注意:关闭浏览器只会使存在客户端浏览器内存中的session cookie失效,不会使服务器端的session对象失效

3、HttpSession的相关API
①、获取Session对象:request.getSession()、request.getSession(boolean creat)
②、属性相关的:setAttribute、getAttribute、removeAttribute
③、使HTTPSession失效的:invalidate()方法
④、设置最大失效的setMaxInactiveInterval

4、URL重写
①、Servlet规范中引入了一种补充的会话管理机制,它允许不支持Cookie的浏览器也可以与WEB服务器保持连接的会话
⑤、将会话标识号以参数形式附加在超链接的URL地址后面的技术成为URL重写
③、代码演示:
">重新登录
   
">注销







你可能感兴趣的:(聊聊Cookie和HttpSession)