ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Cookie对象的使用

2021-04-13 22:00:02  阅读:170  来源: 互联网

标签:cookie 对象 resp Cookie formatTime 使用 import 客户端


  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("欢迎您首次访问页面!");
            }
        }
    }
    
    
    
    
    

标签:cookie,对象,resp,Cookie,formatTime,使用,import,客户端
来源: https://blog.csdn.net/qq_46847568/article/details/115679839

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有