关于cookie的设置、获取以及删除_Tomcat, WebLogic及J2EE讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  Tomcat, WebLogic及J2EE讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 1937 | 回复: 0   主题: 关于cookie的设置、获取以及删除        下一篇 
feng.hu
注册用户
等级:中尉
经验:478
发帖:9
精华:0
注册:1970-1-1
状态:离线
发送短消息息给feng.hu 加好友    发送短消息息给feng.hu 发消息
发表于: IP:您无权察看 2016-8-18 18:56:37 | [全部帖] [楼主帖] 楼主

//用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后,访问获取数据会失败。如果在登录后获取数据信息,如果用回车依然获取不到,因为这时候获取的是本机加载失败的缓存,但是刷新则可以获取到。

   






赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论