• cookie使用


    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路径。不设置的话,默认当前路径;为了让所有项目都访问到可以设置成cookie.setPath("/");
    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
  • 相关阅读:
    一个基础的CURL类
    设计自适应网页方法
    JQ点击列表显示隐藏
    获取当前页面的完整URL
    配置时间生成下拉菜单
    Contains Duplicate II
    Rectangle Area
    面试题47:不用加减乘除做加法
    面试题48:用C++设计一个不能被继承的类
    Reverse Linked List
  • 原文地址:https://www.cnblogs.com/dashuai01/p/5110950.html
Copyright © 2020-2023  润新知