Cookie的实例应用

来源:互联网 发布:客户邮箱搜索软件 编辑:程序博客网 时间:2024/05/12 05:11
 

Cookie的实例应用

一  Cookie的简单实例---如何创建和添加到Servlet中

       第一步:实例化一个Cookie,用来保存会话状态信息

            Cookie cookie1 = new Cookie("name",name);

            cookie1.setMaxAge(24*60*60);//设置一天的时间

            Cookie cookie2 = new Cookie("nicknName",nickName);

    第二步:将生成的Cookie对象添加到响应消息头字段中,从服务器发送给客户端

        response.addCookie(cookie1);

        response.addCookie(cookie2);

 注:(1)在创建了Cookie之后,如果没有设置有效的日期,只存在内存中,只对当前的进程有效.设置日期的时候要注意,日期是用秒来计算的,所有必须转换为秒,格式如下:

有效日期的设置用方法:setMaxAge(24*60*60)

         (2)Cookie是以键值对的形式存在的,所有初始化的时候是用键值对

二  Cookie方法的使用

   1.获取对象的值和属性

       cookie1.getName()

cookie1.getValue()

System.out.println(cookie1.getName()+","+cookie1.getValue());

    2.设置对象的值和属性

       cookie1.setValue("tom");

       注:设置值之后,在地址栏上的值就是它,而且每次输出getValue()时都为空。只有在重置了域名之后,才会改变name值,并且在getValue()是输出的是设置的值,不是null。

    3.设置域名

       cookie1.setDomain(".csdn.com.cn");

cookie2.setDomain("localhost");

       System.out.println(cookie1.getDomain()); //不为空

    4.获取Cookie消息头中的值------消息头有多个,用数组

        从请求对象中获取Cookie值  

Cookie[] cookies = request.getCookies();

       if(cookies!=null){

           for(int i = 0;i<cookies.length;i++){       System.out.println(cookies[i].getName()+":"+cookies[i].getValue()+";"+cookies[i].getMaxAge()+";"+cookies[i].getDomain());

       }

       注:如果cookies为null,则证明是第一次创建Cookie。并且在每次创建Cookie之后,新创建的Cookie会替代旧的作为get消息头,但是响应服务器的时候是新创建的。

    5.Cookie请求头字段

(1)浏览器使用Cookie请求头字段将Cookie信息回送给WEB服务器。

(2)多个Cookie信息通过一个Cookie请求头字段回送给WEB服务器。 

(3)浏览器根据下面的几个规则决定是否发送某个Cookie信息:

       请求的主机名是否与某个存储的Cookie的Domain属性匹配;

       请求的端口号是否在该Cookie的Port属性列表中;

      请求的资源路径是否在该Cookie的Path属性指定的目录及子目录中;

      该Cookie的有效期是否已过。

 

三  实例应用--获取上次访问的时间

    Cookie[] cookies = request.getCookies();

    if(cookies!=null){

       //通过循环遍历

       for(int i = 0;i<cookies.length;i++){

       //上一次的访问时间是根据名字是否相同判断的

       String last = cookies[i].getName();

           if("last_time".equals(last)){

           out.print("你是老用户,上一次访问 时间"+cookies[i].getValue());

               break;

           }

        }

    }else{

            out.print("你是第一次访问站点!");

    }

    注:cookies=null 表示的是第一次访问

四   注意点总结

(1)不是每次访问的Cookie都封装在请求消息中,如果在本地找不到想要访问的Cookie,就不会封装  

(2)每一个Cookie都有一个domain属性  domain是URL  ,即是访问的地址

(3)在发生请求之前先去本地找Cookie,如果在本地找到相同的Cookie,就封装到一个请求消息头字段,发送给服务端

(4)如果setPath()属性和setDomain属性,端口号和有效日期不过期,才会封装到消息头中并发送.

(5)域名的设置-------实现跨域的操作:

    Cookie1.setDomain(.csdn.com.cn);

(6)只有在path、主机、端口、有效日期不过期的情况下,才会覆盖,要不会当成一个新的Cookie