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;
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)