两兄弟之cookie

207 阅读2分钟

什么是cookie

客户端会话技术, 将使用信息数据保存到客户端, 也就是浏览器

cookie简单使用

// 创建cookie
Cookie msg = new Cookie("msg", "hello, cookie");

// 发送cookie
response.addCookie(msg);

// 获取cookies
Cookie[] cookies = request.getCookies();
for (Cookie cookie : cookies) {
    String name = cookie.getName();
    String value = cookie.getValue();
    System.out.println(name + ":" + value);
}

cookie实现原理

在响应头设置cookie

在请求头获取cookie

cookie存活时间

  1. 默认情况下: 浏览器关闭, cookie销毁

  2. 使用setMaxAge()方法设置cookie存活时间, 单位秒(s)

    • 设置负数时, 代表存活时间为默认值
    • 设置正数时, 当这个时间到后, cookie才销毁
    • 设置0时, 删除cookie信息

cookie的特点和作用

特点

  1. cookie存储的数据在用户的浏览器上
  2. 浏览器对每一个的cookie的大小, 对cookie的数量也有限制

作用

  1. cookie一般用于存储比较小量的数据
  2. 在用户不登录的情况下, 识别用户

cookie实例

根据用户是否访问过, 来提示用户或者上次访问时间

// 设置格式
response.setContentType("text/html;charset=utf-8");

// 获取所有cookie
Cookie[] cookies = request.getCookies();

// 建立标记
boolean flag = false;
if (cookies != null && cookies.length > 0) {

    // 遍历cookie
    for (Cookie cookie : cookies) {
        String msg = cookie.getValue();
        String name = cookie.getName();

        // 如果有这个时间cookies, 表示用户不是第一次访问
        if (name.equals("lastTime")) {
            flag = true;

            // 重新设置登录时间
            Date date = new Date();
            DateFormat dateFormat = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
            String format = dateFormat.format(date);
            String encode = URLEncoder.encode(format, "utf-8");
            Cookie lastTime = new Cookie("lastTime", encode);
            response.addCookie(lastTime);

            // 向用户回写信息
            PrintWriter writer = response.getWriter();
            writer.write("欢迎回来! 您上次访问时间为"+ URLDecoder.decode(msg, "utf-8"));
            break;
        }
        System.out.println(msg);
    }
}

// 如果用户第一次访问
if (cookies == null || cookies.length == 0 || flag == false) {
    // 设置登录时间
    Date date = new Date();
    DateFormat dateFormat = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
    String format = dateFormat.format(date);
    String encode = URLEncoder.encode(format, "utf-8");
    Cookie lastTime = new Cookie("lastTime", encode);
    response.addCookie(lastTime);

    // 向用户回写信息
    PrintWriter writer = response.getWriter();
    writer.write("欢迎您!!!");
}

总结 : 学了几天JavaEE, 感觉甚是好玩呢, 双胞胎兄弟很多, 诸如: request和response, cookie和session, 热情还在, 我还会继续哦!!!