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自动失效
- 手动设置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;



