servlet之cookie

servlet之cookie,第1张

servlet之cookie 什么是cookie?

cookie是保存客户端的纯文本文件,是一种客户端技术。当我们访问某个网站时,浏览器向服务器发起请求,服务器根据浏览器的编号生成一个cookie并通过服务器响应返回给客户端;当客户端再次发起请求时,客户端携带cookie一并发送给服务器,告知用户状态信息。即cookie可以保存会话信息。
从浏览器请求拿到cookie,服务器响应客户端cookie。

cookie的有效期
  cookie cookie = new cookie("username","root");    
  //设置cookie有效期为一天
  cookie.setMaxAge(24*60*60);

MaxAge代表cookie的有效期,可以通过setMaxAge()方法来设置有效期时间;
cookie分为两种类型:一种是保存在内存中的,此时MaxAge为负数或者0,这种cookie只在当前会话中有效,关掉浏览器窗口后cookie立即失效;另外一种是保存在本地客户端的, 此时的MaxAge为正数,setMaxAge()方法的参数以秒计算,这种无论关掉窗口还是重新打开浏览器,还是重启机器,只要cookie不失效,那么访问此网站时,浏览器就会找对应的webapplication的cookies。

删除cookie
  • 如果没有设置有效期,关闭浏览器,cookie自动失效
  • 手动设置MaxAge=0,此时cookie立马失效
 cookie.setMaxAge(0);
cookie的其他信息
  • 一个cookie只能保存一个信息
  • 一个web站点可以向浏览器发送多个cookie,服务端保存上限20个
  • 浏览器保存上限300个
  • 一个cookie不超过4kb
测试
package com.zhmsky.servlet;

import javax.servlet.ServletException;
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.util.Date;


public class cookieDemo01 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //服务器以utf-8编码
        resp.setCharacterEncoding("utf-8");
        //告诉浏览器以utf-8解码
        resp.setContentType("text/html;charset=utf-8");
        PrintWriter out = resp.getWriter();
        cookie[] cookies = req.getcookies();
        if (cookies != null) {
            for (int i = 0; i < cookies.length; i++) {
                if ("lastLoginTime".equals(cookies[i].getName())) {
                    out.write("上一次访问时间是:");
                    String value = cookies[i].getValue();
                    long lastLoginTime = Long.parseLong(value);
                    Date date = new Date(lastLoginTime);
                    out.println(date.toLocaleString());
                    out.print("当前访问时间为:");
                    out.print(new Date(System.currentTimeMillis()).toLocaleString());
                }
            }
        } else {
            out.print("这是第一访问本站点!");
        }
        cookie cookie = new cookie("lastLoginTime", String.valueOf(System.currentTimeMillis()));
        resp.addcookie(cookie);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}


网络抓包可以看到,响应设置了cookie信息,保存了一个时间戳1634661018216,而请求头中的cookie为上一次访问时的时间戳1634661007928;

查看浏览器cookie信息,可以看到此时cookie保存的时间戳为1634661018216;

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/3995879.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-10-22
下一篇 2022-10-22

发表评论

登录后才能评论

评论列表(0条)

保存