保存会话数据的两种技术
Cookie
Cookie 是客户端技术,程序把每个用户的数据以cookie的形式写给用户的浏览器。当用户使用浏览器再去访问服务器中的web资源时,就会带着各自的数据去。web资源处理的就是用户各自的数据了。
HttpSession
session是服务端技术,服务器在运行时可以为每个用户的浏览器创建一个独享的HttpSession对象,由于session为用户浏览器独享,所以用户再次访问时会拿取session中数据。
案例一:使用cookie记录上次访问的时间
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
//拿到客户端携带的记录上次访问时间的cookie:加上cookie的名字是lastaccesstime,值是一个long类型额数字
//拿到客户端携带的所有的cookie
Cookie[] c = request.getCookies();
//循环判断,拿到需要的cookie
for (int i = ; c != null&&i < c.length ; i++) {
Cookie cookie = c[i];
if(cookie.getName().equals("lastaccesstime")){
out.write("你上次访问的时间是:");
String time = cookie.getValue();
//time-->long
long t = Long.parseLong(time);
//formate
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
//create a date object
Date d = new Date(t);
//output
out.write(sdf.format(d) + " <a href=''>清除cookie</a>");
}
}
//向客户端发送cookie
Cookie nc = new Cookie("lastaccesstime",new Date().getTime()+"");
//设置缓存时间,放到硬盘上,不在缓存中,默认cookie的生命周期就是一个会话
nc.setMaxAge(Integer.MAX_VALUE);
//发送到客户端
response.addCookie(nc);
}
删除客户端cookie
因为没有删除cookie的方法,所以通过添加新的cookie来覆盖之前的cookie
" <a href='"+ request.getContextPath() + "/servlet/cookie2" +"'>清除cookie</a>"
cookie2
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { //没有删除的方法,所以就创建一个同名的cookie,将存活时间设置为0,覆盖客户端原来的cookie
Cookie c = new Cookie("lastaccesstime","");//不需要设置值,就是为了失效,根本用不到
c.setMaxAge();
//发送到客户端
response.addCookie(c);
}
获取上次的cookie
需要指定cookie的路径,只有cookie的路径和访问路径对应才能获取:
设置路径
nc.setPath(request.getContextPath());
获取cookie
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
out.write("你上次访问的时间是:");
//需要设置浏览器携带cookie的路径 //拿到所有的cookie
Cookie[] cs = request.getCookies();
//拿到记录上次访问时间的cookie
for (int i = ; cs != null && i < cs.length; i++) {
Cookie c = cs[i];
if(c.getName().equals("lastaccesstime")){
String value = c.getValue(); out.write(value);
}
}
}
cookie是否为唯一 :域名 + 访问路径 + Cookie的名字