码迷,mamicode.com
首页 > 其他好文 > 详细

cookie使用

时间:2016-01-07 20:14:11      阅读:186      评论:0      收藏:0      [点我收藏+]

标签:

cookie介绍

cookie是浏览器保存在用户计算机上的少量数据,他与特定的WEB页或者WEB站点进行关联起来,自动地在WEB浏览器与WEB服务器之间传递

浏览器会将domain和path都相同的cookie保存在一个文件里,cookie间用*隔开。

  • Path-路径  ---在某个域名下的cookie保存目录

        如果在http://www.baidu.com/test/index.html建立一个cookie,那么就在http://www.baidu.com/test/这个目录里就创建了一个cookie。

假设cookie的路径如下

/

/test

/test/test2

/test345

/test555/test666

注意事项:

  1. 相同键名的Cookie可以存在于不同的路径下,如果同一个目录下键名相同新建的会覆盖之前的
  2. 删除时,若果当前路径下没有键为key的cookie,则查询全部的父路径,检索到就执行删除操作(每次只能删除一个与自己最近的父路径cookie)

        a . 必须指定与设定cookie时使用的相同的路径来删除cookie,而且cookie的键名不论大写,小写或大小混合都要指定路径

        b . 键名为小写的时候,如果当前的路径为/test/test2,如果找不到再向上查询/test,/test555,/test345,如果还找不到就查询/。(/test555/test666不查询)

             键名大小写混写或者大写的时候,不指定路径默认删除当前路径,并且不向上查询

  1. 读取cookie的时候只能读取直接父类的cookie
  2. 再做java的web项目的时候,由于一般的Web服务器(如tomcat或者jetty)都用Context来管理不同的WebApplication,这样队友每个Context都有不同的path,在一个Server中有多个Web Application时要特别小心,不要设置Path为/的Cookie,容易误操作(当然前提是域名相同 )
  • Domain-域

指定关联的WEB服务器或者域。值是域名,比如baidu.com.,这是对path路径属性的一个延伸。如果我们想mp3.baidu.com能够访问test.baidu.com设置cookie。我们可以将domain的属性设置成“baidu.com”,这样mp3.baidu.com与test.baidu.com就都能访问到了。如果要在mp3.baidu.com创建一个mp3.baidu.com不能访问只有test.baidu.com能访问的cookie,那么就要将cookie的domin属性设置成”test.baidu.com”

注意:不能把cookie域属性设置成与设置它的服务器所在域不同的值。

  • Secure-安全

指定cookie的值通过网络如何在用户与WEB服务器之间进行传递。这个属性的值字在浏览器中或许为”secure”获取为空(在java中用true,false设置,默认为false)。在缺省状态下,该属性为空,也就是使用不安全的http协议进行传递数据。如果cookie标记为secure,那么,他与WEB服务器之间就通过https或者其他安全协议传递数据。不过设置了secure属性其他人还是能在本地看到你机器本地保存的cookie。也就是说:cookie设置secure。只保证cookie与WEB服务器之间数据传输过程中进行加密,而保存在本地的cookie不加密。如果想让本地cookie也加密,得自己加密数据。

  • Expires-过期时间

指定cookie的生命期。具体的值是指过期时间。默认关闭浏览器即过期,如果想要保存更长的时间就要设置日期,当过了到期日期,浏览器会删除cookie文件。现在已经被max-age属性所取代,max-age用秒来设置cookie生存期

java中操作cookie

  1. 设置cookie
Cookie cookie = new Cookie("key", "value");
cookie.setMaxAge(60);//设置生存期秒为单位。设置为负值的话,关闭浏览器就失效
cookie.setPath("/test/test2");//设置cookie路径。不设置的话,默认当前路径
response.addCookie(cookie);

   2.   读取cookie

private String getCookieValue(HttpServletRequest request, String name) {
        Cookie[] cookies = request.getCookies();
        String cookieValue = null;
        String cookieName = "";
        if (cookies != null && cookies.length > 0) {
            for (Cookie cookie : cookies) {
                cookieName = cookie.getName();
                if (name.equals(cookieName)) {
                    cookieValue = cookie.getValue();
                    cookieValue = URLDecoder.decode(cookieValue);
                    break;
                }
            }
        }

        return cookieValue;
    }

    3.    删除cookie

Cookie cookie = new Cookie("key", null);
cookie.setMaxAge(0); //设置为0为立即删除该Cookie
cookie.setPath("/test/test2"); //删除指定路径上的Cookie,不设置该路径,默认为删除当前路径Cookie
response.addCookie(cookie);

    4.    修改cookie

Cookie cookie = new Cookie("key", "newvalue");
cookie.setMaxAge(60);//设置生存期秒为单位。设置为负值的话,关闭浏览器就失效
cookie.setPath("/test/test2");//设置cookie路径。不设置的话,默认当前路径
response.addCookie(cookie);
当域相同,path相同,key相同的时候,重新创建cookie默认将原来的值value覆盖为新的newvalue

cookie使用

标签:

原文地址:http://www.cnblogs.com/dashuai01/p/5110950.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!