定义:用户开一个浏览器,点击多个超链接,访问服务器多个web资源,然后关闭浏览器,整个过程 称之为一个会话。
注:点击浏览器的超链接后,以一个新窗口打开,这个也是同一个会话过程,是基于浏览器的。
保存会话数据的两种技术(实现用户的数据共享)
Cookie
Cookie是客户端技术,程序把每个用户的数据以cookie的形式写给用户各自的浏览器。当用户使用浏览器再去访问服务器中的web资源时,就会带着各自的数据去。这样,web资源处理的就是用户各自 的数据了。
javax.servlet.http.Cookie类
public Cookie(String name,String value):构造函数用于封装用户的数据
setValue与getValue方法:设置或获取Cookie的值
setMaxAge与getMaxAge方法:设置或获取Cookie的有效期。
注意:不设置有效期默认为会话范围,关闭浏览器就没了。
setPath与getPath方法:设置和获取Cookie的有效目录
注意:没设置有效目录默认为当前程序所在目录。
setDomain与getDomain方法:设置和获取Cookie 的有效域。如设置为 .sina.com以后访问这个域就 待着Cookie。(这个方法没用,浏览器会阻止第三方的Cookie)
getName方法:获取Cookie的名称。
response接口也中定义了一个addCookie方法,它用于在其响应头中增加一个相应的Set-Cookie头字段。 同样,request接口中也定义了一个getCookies方法,它用于获取客户端提交的Cookie。
案例
首页显示用户上次登录的时间
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//由于有中文显示,防止乱码发生
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
out.write("您上次访问时间是:");
//1.获取用户上次访问的时间,显示
Cookie cookies[] = request.getCookies();
//第一次访问没有时间,所以要注意空的判断
for(int i=0;cookies!=null && i<cookies.length;i++){
Cookie cookie = cookies[i];
//cookie命名为lastAccessTime
if(cookie.getName().equals("lastAccessTime")){
long time = Long.parseLong(cookie.getValue());
//将毫秒值转成日期对象
Date date = new Date(time);
out.write(date.toLocaleString());
}
}
//2.把本次的时间以cookie的形式回写给客户机 (lastAccessTime)
Cookie cookie = new Cookie("lastAccessTime",System.currentTimeMillis()+"");
//如果不设置有效期,当关闭浏览器下次就不会显示时间了
cookie.setMaxAge(1*24*60*60);
response.addCookie(cookie);
}
Cookie注意事项
1、一个Cookie只能标识一种信息,它至少含有一个标识该信息的名称(NAME)和设置值(VALUE)。
2、一个WEB站点可以给一个WEB浏览器发送多个Cookie,一个WEB浏览器也可以存储多个WEB站点提 供的Cookie。
3、浏览器一般只允许存放300个Cookie,每个站点最多存放20个Cookie,每个Cookie的大小限制 为4KB。
4、服务器端想删除客户端的cookie就可以将setMaxAge的参数设为0则是命令浏览器删除该cookie。
删除cookie时,path必须一致,否则不会删除
Session
Session是服务器端技术,利用这个技术,服务器在运行时可以为每一个用户的浏览器创建一个其独享的session对象,由于session为用户浏览器独享,所以用户在访问服务器的web资源时,可以把各自 的数据放在各自的session中,当用户再去访问服务器中的其它web资源时,其它web资源再从用户各 自的session中取出数据为用户服务。
Session和Cookie的主要区别在于:
Cookie是把用户的数据写给用户的浏览器。
Session技术把用户的数据写到用户独占的session中。
Session是基于Cookie的。
实现原理
当访问数据时,服务器就会帮浏览器创建Session对象,每个Session都有个id号,创建完毕后服务器立马会把id号以Cookie的形式回写给浏览器,当下次访问另一个资源时,就会检测有没有这个id号的 Session,这也是为什么拿到同一个Session的原因。(通过这个原理我们帮浏览器实现Cookie的回写, 并设置有效期,就能实现多浏览器共享)每一个Session默认存在30分钟,过后就被摧毁。这个时间 可以在conf的web.xml文件中更改。