//用cookie存储用户名
// 将用户名放到cookie中,前面name为key,userName为value,且key与value只能为String类型
Cookie userCookie = new Cookie("name",userName);
//cookie有效路径"/"是网站根目录,比如tomcat下的webapp,在webapp下的所有应 用共享此cookie.
//默认情况下,cookie会和创建它的网页以及与这个网页处于同一个目录下的网页和处于该目录下的子目录关联。
userCookie.setPath("/");
//设置保存Cookie的时间,以秒为单位,默认情况下cookie没有生命周期,浏览器关闭即cookie里面的存放的值消失
userCookie.setMaxAge(12*24*3600);
//设置cookie的域,这里可以实现多个项目共同访问
userCookie.setDomain(".landingbj.com");
//向客户端写入,将Cookie添加到Response中,使之生效
response.addCookie(userCookie);
//清除cookie中的存储信息
Cookie[] cookies = request .getCookies();
try {
for(int i=0;i<cookies.length;i++){
Cookie cookie = new Cookie(cookies[i].getName(), null);
cookie.setMaxAge(0);
cookie.setPath("/");
response.addCookie(cookie);
}
}catch(Exception e){
System.out.println("清空Cookies发生异常!");
}
//获取cookie中的用户名
Cookie[] cookies = request.getCookies();
if(cookies!=null){
//当清除cookie后,未关闭浏览器时cookie有一个JSESSIONID
for(int i=0;i<cookies.length;i++){
if("userName".equals(cookies[i].getName())){
if(cookies[i].getValue()!=null&&!cookies[i].getValue().equals("")){
chain.doFilter(request, response); //让目标资源执行,放行
return;
}
}
}
}
小结:
1.domain
表示的是cookie所在的域,默认为请求的地址,如网址为www.landingbj.com/frame.jsp,那么domain默认为
www.landingbj.com。而跨域访问,如域A为test.landingbj.com,域B为course.landingbj.com,那
么在域A生产一个令域A和域B都能访问的cookie就要将该cookie的domain设置为.landingbj.com;如果要在域A生产一个令域
A不能访问而域B能访问的cookie就要将该cookie的domain设置为course.landingbj.com。
2.关于JSESSIONID
session
是针对每一个用户的,变量的值保存在服务器端,通过SessionID来区分不同的客户,session是以Cookie或URL重写为基础。默认使用
Cookie来实现,系统会创造一个名为JSESSIONID的输出Cookie,或称为"Session
Cookie",以区别Persistent Cookies(通常所说的Cookie).Session
Cookie是存储在浏览器中,并不是写在硬盘上的,但是把浏览器的Cookie禁止后,使用response对象的encodeURL或
encodeRedirectURL方法编码URL,WEB服务器会采URL重写的方式传递SessionId,用户就可以在地址栏看到 jsessionId=A09JHGHKHU68624309UTY84932之类的字符串。因此,当用户第一次向服务器请求时,服务器会给用户生成一个 唯一的标识符,并将该sessionId写入浏览器的cookie中,关闭浏览器时,该sessionId会清空。所以判断如果没有关闭浏览器的时候,除 非手动清理浏览器的cookie,不然cookie会有一个JSESSIONID在里面。
3.关于cookie的setMaxAge,如果设置为0表示立即清除,如果设置为-1表示浏览器关闭时清除,建议设置为0,不然可以获取到之前存储在cookie的getName。
4.关于cookie中值的获取,只能够遍历,不能直接获得。
5.关于访问地址栏回车与刷新的区别先来说“刷新”,它是在你现有页
面的基础上,检查网页是否有更新的内容。在检查时,会保留之前的一些变量的值,因此有
可能会造成刷新后网页出现错误,或者打不开的情况;“转到”和在地址栏回车,则相当于
你重新输入网页的URL访问,这种情况下,浏览器会尽量使用已经存在于本机中的缓存。
也就是说,“刷新” 是取网页的新内容来更新本机缓存,在更新的同时保留之前的一些变
量;“转到”则是一种全新的访问,它会尽量使用本机缓存中的文件。
因此我们会发现当清除cookie后,访问获取数据会失败。如果在登录后获取数据信息,如果用回车依然获取不到,因为这时候获取的是本机加载失败的缓存,但是刷新则可以获取到。