六、cookies

一、cookie概述
       Cookie是客户端技术,程序把每个用户的数据以cookie的形式写给用户的浏览器,当用户使用浏览器去访问服务器中的web资源时,就会带着数据,这样web资源就可以处理用户各自的数据了。
       Session是服务端技术,利用这个技术,服务器在运行时可以为每个用户创建一个独享的HttpSession对象,由于session为用户独享,所以当用户访问服务器的web资源时,可以把数据放在各自的session中,当用户下次在访问时可以从web资源中重新取出各自的信息。Session也是一个与对象作用范围是一个会话
二、方法
构造方法
Cookie(String name, String value)
实例化Cookie对象,传入cooke名称和cookie的值
       普通方法:
    取得Cookie的名字    
public String getName()
取得Cookie的值
public String getValue()
设置Cookie的值
public void setValue(String newValue)
设置最大保存时间
public void setMaxAge(int expiry)
cookie.setMaxAge(-1);//浏览器关闭时删除
    cookie.setMaxAge(0);//立即删除

cookie.setMaxAge(-1);//浏览器关闭时删除
cookie.setMaxAge(0);//立即删除
cookie.setMaxAge(1000*3600*24);//设置时间一天
cookie.setMaxAge(Integer.MAX_VALUE);

设置Cookie的最大保存时间,即cookie的有效期,当服务器给浏览器回送一个cookie时,如果在服务器端没有调用setMaxAge方法设置cookie的有效期,那么cookie的有效期只在一次会话过程中有效,用户开一个浏览器,点击多个超链接,访问服务器多个web资源,然后关闭浏览器,整个过程称之为一次会话,当用户关闭浏览器,会话就结束了,此时cookie就会失效,如果在服务器端使用setMaxAge方法设置了cookie的有效期,比如设置了30分钟,那么当服务器把cookie发送给浏览器时,此时cookie就会在客户端的硬盘上存储30分钟,在30分钟内,即使浏览器关了,cookie依然存在,在30分钟内,打开浏览器访问服务器时,浏览器都会把cookie一起带上,这样就可以在服务器端获取到客户端浏览器传递过来的cookie里面的信息了,这就是cookie设置maxAge和不设置maxAge的区别,不设置maxAge,那么cookie就只在一次会话中有效,一旦用户关闭了浏览器,那么cookie就没有了,那么浏览器是怎么做到这一点的呢,我们启动一个浏览器,就相当于启动一个应用程序,而服务器回送的cookie首先是存在浏览器的缓存中的,当浏览器关闭时,浏览器的缓存自然就没有了,所以存储在缓存中的cookie自然就被清掉了,而如果设置了cookie的有效期,那么浏览器在关闭时,就会把缓存中的cookie写到硬盘上存储起来,这样cookie就能够一直存在了。
public int getMaxAge()
获取Cookies的有效期
public void setPath(String uri)
设置cookie的有效路径,默认是当前项目
public String getPath()
获取cookie的有效路径
public void setDomain(String pattern)
    设置cookie的有效域
public String getDomain()
获取cookie的有效域
response接口也中定义了一个addCookie方法,它用于在其响应头中增加一个相应的Set-Cookie头字段。 同样,request接口中也定义了一个getCookies方法,它用于获取客户端提交的Cookie。
三、cookie案例
       1、
public void doGet(HttpServletRequest request, HttpServletResponse response)
                     throws ServletException, IOException {
              request.setCharacterEncoding("utf-8");
              response.setCharacterEncoding("utf-8");
              Cookie[] cookies = request.getCookies();
              PrintWriter writer = response.getWriter();
              if (cookies==null) {
                     writer.write("这是你第一次访问本站");
              }else {
                     for (int i = 0; i < cookies.length; i++) {
                            Cookie cookie = cookies[i];
                            String name = cookie.getName();
                            if (name.equals("lastTime")) {
                                   String value = cookie.getValue();
                                   long l = Long.parseLong(value);
                                   SimpleDateFormat f=new SimpleDateFormat("yy-MM-dd HH:mm:ss");
                                   Date d=new Date();
                                   d.setTime(l);
                                   try {
                                          String format = f.format(d);
                                          writer.write("上次访问时间是:");
                                          writer.write(format.toString());
                                   } catch (Exception e) {
                                          // TODO Auto-generated catch block
                                          e.printStackTrace();
                                   }
                            }
                     }
              }
              
              //添加cookie
              Cookie c=new Cookie("lastTime",System.currentTimeMillis()+"");
              response.addCookie(c);


在上面的例子中,在程序代码中并没有使用 setMaxAge 方法设置 cookie 的有效期,所以当关闭浏览器之后, cookie 就失效了,要想在关闭了浏览器之后, cookie 依然有效,那么在创建 cookie 时,就要为 cookie 设置一个有效期。如下所示:
       c.setMaxAge(1000*3600*24);//设置保存时间
三、注意事项
1、一个 Cookie 只能标识一种信息,它至少含有一个标识该信息的名称( NAME )和设置值( VALUE )。
2、一个 WEB 站点可以给一个 WEB 浏览器发送多个 Cookie ,一个 WEB 浏览器也可以存储多个 WEB 站点提供的 Cookie
3、浏览器一般只允许存放 300 Cookie ,每个站点最多存放 20 Cookie ,每个 Cookie 的大小限制为 4KB
4 果创建了一个 cookie ,并将他发送到浏览器,默认情况下它是一个会话级别的 cookie (即存储在浏览器的内存中),用户退出浏览器之后即被删除。若希望浏览器将该 cookie 存储在磁盘上,则需要使用 maxAge ,并给出一个以秒为单位的时间。将最大时效设为 0 则是命令浏览器删除该 cookie
四、删除 cookie

         Cookie cookie = new Cookie("lastAccessTime",  System.currentTimeMillis()+"");
        //将cookie的有效期设置为0,命令浏览器删除该cookie
         cookie.setMaxAge(0);
        response.addCookie(cookie);

五、存取中文的 cookies

编码:
Cookie cookie = new Cookie("userName", URLEncoder.encode("中文",  "UTF-8"));
response.addCookie(cookie);
解码:
URLDecoder.decode(cookies[1].getValue(), "UTF-8")

猜你喜欢

转载自blog.csdn.net/gj_user/article/details/80147826