zoukankan      html  css  js  c++  java
  • Cookie技术

    u  常用的API

    创建Cookie对象

    Cookie(String name, String value)    ->以指定数据创建Cookie对象

    设置Cookie对象

    void setMaxAge(int expiry)                ->设置Cookie的最大有效时间

    void setPath(String uri)                             ->设置Cookie的有效路径

    void setDomain(String pattern)            ->设置Cookie的有效域

    发送Cookie对象

    void addCookie(Cookie cookie)           ->发送Cookie对象

    获取Cookie对象

    Cookie[] getCookies()                         ->获取用户请求中的Cookie数组

    获取Cookie中携带信息

    int getMaxAge()                                ->获取Cookie的最大有效时间

    String getName()                               ->获取Cookie的名字

    String getValue()                               ->获取Cookie存储的值

    String getDomain()                            ->获取Cookie的有效域

    String getPath()                                 ->获取Cookie的有效路径

      读和写多个Cookie

    如果给客户端输出多个Cookie对象,那么服务器会创建多个

    Set-Cookie: name=jack; Expires=Wed, 16-Jan-2013 07:02:01 GMT

    Set-Cookie: password=root; Expires=Wed, 16-Jan-2013 07:02:01 GMT头字段进行Cookie的发送。

    多个Cookie在浏览器缓存中以一个文件的形式进行存储。

    浏览器使用一个Cookie: name=jack; password=root带多个Cookie数据。

     Cookie有效路径

    以上的代码在第一次写回Cookie后,如果后面继续请求该网站的其他资源,那么还会继续携带Cookie对象直到Cookie过期。但是如果访问不同网站那么不带该Cookie。

    cookie2.setPath("/day08/read");

    Set-Cookie: password=root; Expires=Wed, 16-Jan-2013 07:25:06 GMT; Path=/day08/read

    存储的时候由于两个Cookie的有效路径不同,因此存储在不同的Cookie文件中。

    但是指定有效路径的Cookie文件中多了有效路径的值。

    password

    root

    localhost/day08/read

    但是如果现在需要在不同的网站中传递Cookie对象,那么如何指定有效路径。

    cookie2.setPath("/");   à 指定Cookie的有效路径是tomcat的webapps目录

      Cookie的跨域

    假定A服务器上发布一个网站叫CMS系统,域名www.sina.com.cn

    在CMS系统中可以直接编写一个写Cookie的Servlet。但是要设置该Cookie的有效域。

    cookie.setDomain(“.163.com”);

    假定B服务器上发布一个网站叫IT系统,域名www.163.com

    编写一个获取Cookie数据的Servlet进行Cookie的数据读取。

    总结:

    1. 可以实现自动登录。用户名和密码默认是明码的。开发者需要自定义加密。Md5 Base64
    2. 购物车的商品ID信息
    3. 存储用户上次的登录时间

    使用Cookie实现显示用户的上次访问时间

     1 public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
     2          // 页面输出
     3          response.setCharacterEncoding("utf-8");
     4          response.setContentType("text/html;charset=utf-8");
     5          request.setCharacterEncoding("utf-8");
     6          // 获取字符输出流对象
     7          PrintWriter out = response.getWriter();
     8          // 获取Cookie数组对象
     9          Cookie [] cookies = request.getCookies();
    10          // 定义一个时间的字符串变量
    11          String date = null;
    12          // 定义一个变量存储系统当前日期
    13          Date current_date = new Date();
    14          SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
    15          // 判断是否是第一次登陆
    16          if(cookies != null){
    17              // 直接循环
    18              for(Cookie cookie : cookies){
    19                  // 获取Cookie
    20                  if("lasttime".equals(cookie.getName())){
    21                      // 获取上次访问的时间
    22                      date = cookie.getValue(); 
    23                      break;
    24                  }else{
    25                      // 获取系统时间
    26                      date = format.format(current_date);
    27                  }
    28              }
    29          }else{
    30              // 获取系统时间
    31              date = format.format(current_date);
    32          }
    33          // 显示时间
    34          out.println(date);
    35          // 将这次访问的时间写入Cookie
    36          Cookie new_cookie = new Cookie("lasttime",
    37 format.format(new Date())); 
    38          new_cookie.setMaxAge(5*60);
    39          new_cookie.setPath("/day08/showtime");
    40          // 发送
    41          response.addCookie(new_cookie);
    42     }

     如果cookie没有调用setMaxAge方法,这个cookie没被放在文件里,而是放在客户端浏览器的内存中。

    Cookie细节

    1. 一个Cookie只能存储一种信息。
    2. 一个网站可以发送多个Cookie,浏览器可以同时携带多个Cookie。
    3. 同一个网站最多发送20个Cookie,浏览器最多存储300个Cookie,一个Cookie最多存储数据在4K以内。
    4. 如果创建了Cookie对象没有指定最大有效时间那么不会存储在浏览器的缓存中。
  • 相关阅读:
    npm
    React
    php区分new static 和new self
    tiny java web server
    算法可视化
    在线markdown编辑器
    JAVA
    linux find命令
    自定义windows新建菜单
    floyd算法
  • 原文地址:https://www.cnblogs.com/friends-wf/p/3732195.html
Copyright © 2011-2022 走看看