您好,欢迎访问代理记账网站
  • 价格透明
  • 信息保密
  • 进度掌控
  • 售后无忧

Cookie对象的使用

  1. Cookie对象是做什么的?
    在我的理解里,Cookie是客户端用来和客户端保持通讯信息的一个对象。

  2. 怎样使用Cookie
    使用一个对象,很显然我们要先创建他
    Cookie cookie = new Cookie(name, value);
    然后用res对象将Cookie发送给客户端
    res.addCookie(cookie);
    这样客户端下次访问服务器的时候,请求头中就会包含Cookie的信息,服务器就知道是哪个客户端在访问他了。我们在服务器中用req对象获取浏览器的Cookie
    req.getCookies()

  3. Cookie需要注意的细节

    1. 一次可不可以发送多个Cookie
      可以,可以创建多个Cookie对象,使用resp对象调用多次addCookie方法发送Cookie即可
    2. Cookie在浏览器中保存多长时间
      1. 默认情况下,浏览器关闭后,Cookie会被销毁
      2. 持久化存储:setMaxAge(int seconds)
        1. 正数:将Cookie数据写道硬盘的文件中。持久化存储(正数越大,时间越长)
        2. 负数:默认值
        3. 0:删除Cookie信息
  4. Cookie能不能存中文
    在tomcat8之前Cookie之中不能存储中文,但是特殊字符还是不支持,建议使用URL编解码

  5. Cookie共享问题
    默认情况下Cookie不能共享
    用于设置Cookie范围:setPath(String Path),设置Cookie的获取范围。默认情况下,会去设置当前的虚拟目录,如果要共享,将path设置为/
    不同的tomcat服务器间Cookie共享问题
    setDomain(String path):如果设置一级域名相同,那么多个服务器之间就能共享Cookie
    例如: setDomain(".baidu.com"),那么tieba.baidu.com和news.baidu.com中的Cookie可以共享

  6. Cookie的特点

    1. Cookie存储数据在客户端服务器
    2. 浏览器对于单个Cookie的大小有限制(4kb)以及对于同一个域名下的总Cookie数量也有限制(20个)

    作用:

    1. 存储少量的不太敏感的数据
    2. 在不登录的情况下,完成服务器对客户端的识别
  7. 应用Cookie的案例

    
    ```java
    package cn.zzl.cookie;
    
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.Cookie;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    import java.io.PrintWriter;
    import java.net.URLDecoder;
    import java.net.URLEncoder;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    
    @WebServlet("/demo4")
    public class Demo4 extends HttpServlet {
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            this.doPost(req, resp);
        }
    
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            //服务器告诉客户端本次响应体的数据格式以及编码格式
            resp.setContentType("text/html;charset=utf8");
            Cookie[] cookies = req.getCookies();
            boolean flag = false;
    
            if (cookies != null && cookies.length > 0) {
                for (Cookie cookie : cookies) {
                    String name = cookie.getName();
                    System.out.println(name);
                    //如果浏览器不是第一次访问该服务器
                    if ("lastTime".equals(name)) {
                        flag = true;
                        PrintWriter writer = resp.getWriter();
                        //获取日期格式化对象
                        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
                        Date date = new Date();
                        //格式化当前日期
                        String formatTime = simpleDateFormat.format(date);
                        //由于tomcat8版本的Cookie并不支持特殊字符,所以使用u8编码
                        formatTime = URLEncoder.encode(formatTime, "utf-8");
                        //设置Cookie生命时间
                        cookie.setMaxAge(60 * 60 * 24 * 30);
                        resp.addCookie(cookie);
                        String value = cookie.getValue();
                        value = URLDecoder.decode(value, "utf-8");
                        writer.write("欢迎回来,上次访问的时间是:" + value);
                        cookie.setValue(formatTime);
                        break;
                    }
                }
            }
    
            if (cookies == null || cookies.length == 0 || !flag) {
                PrintWriter writer = resp.getWriter();
                SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
                Date date = new Date();
                String formatTime = simpleDateFormat.format(date);
                formatTime = URLEncoder.encode(formatTime, "utf-8");
                Cookie cookie = new Cookie("lastTime", formatTime);
                cookie.setMaxAge(60 * 60 * 24 * 30);
                resp.addCookie(cookie);
                writer.write("欢迎您首次访问页面!");
            }
        }
    }
    
    
    
    
    

分享:

低价透明

统一报价,无隐形消费

金牌服务

一对一专属顾问7*24小时金牌服务

信息保密

个人信息安全有保障

售后无忧

服务出问题客服经理全程跟进