【学习笔记】Cookie
什么是会话?
-
会话:用户打开一个浏览器,点击了一些超链接,访问了多个web资源,关闭浏览器,这个过程称之为会话。
-
有状态会话:记录用户曾经登录过某个网站。
什么是Cookie?
-
Cookie,有时也用其复数形式 Cookies。类型为“小型文本文件”,是某些网站为了辨别用户身份,进行Session跟踪而储存在用户本地终端上的数据(通常经过加密),由用户客户端计算机暂时或永久保存的信息。
-
作用:比如我们在访问一些网站时,第一次登录后,下一次再访问该网站,就不需要登录了。如哔哩哔哩、博客园等。
保存Cookie的两种方式
-
Cookie 使用客户端技术
-
Session 服务器技术,使用这个技术,可以保存用户的会话信息,我们可以把信息或数据保存在session中。
Cookie实现
Cookie类
-
Cookie中的一些属性
private static final long serialVersionUID = -6454587001725327448L; private static final String TSPECIALS; private static final String LSTRING_FILE = "jakarta.servlet.http.LocalStrings"; private static ResourceBundle lStrings = ResourceBundle.getBundle("jakarta.servlet.http.LocalStrings"); private String name; private String value; private String comment; private String domain; private int maxAge = -1; private String path; private boolean secure; private int version = 0; private boolean isHttpOnly = false;
name 是 键 value 是值,maxAge是Cookie的有效期......
-
Cookie的关于属性的get/set方法
public String getName() { return this.name; } public void setValue(String newValue) { this.value = newValue; } public String getValue() { return this.value; } ......
我们以保存用户上一次访问的时间为例,了解cookie
import jakarta.servlet.ServletException;
import jakarta.servlet.http.Cookie;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;
public class CookieDemo02 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("text/html");
req.setCharacterEncoding("utf-8");
resp.setCharacterEncoding("utf-8");
PrintWriter out = resp.getWriter();
//服务器从客户端获取cookie
Cookie[] cookies = req.getCookies(); //返回的数组说明Cookie可能存在多个
//判断cookie是否存在
if (cookies!=null){
out.write("你上一次访问的时间是:");
//存在,则遍历cookie数组
for (int i = 0; i < cookies.length; i++) {
//判断cookie的key是否和,相应给客户端的key相同
if (cookies[i].getName().equals("lastTime")) {
//相同,获取cookie的值
String value = cookies[i].getValue();
long l = Long.parseLong(value); //转换成长整型
Date date = new Date(l); //将长整型转化为时间型
out.write(date.toString());
}
}
}else{
out.write("这是你第一次访问本站");
}
//服务器给客户端响应一个cookie
Cookie cookie = new Cookie("lastTime", System.currentTimeMillis()+""); //创建一个Cookie
resp.addCookie(cookie); //相应给客户端
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
当你一打开浏览器,浏览器会创建一个Cookie为JSESSIONID,如下图
所以当你第一次访问这个网站,cookie数组不会为空,也就不会打印出”这是你第一次访问本站“这句话
当你关闭浏览器,再次打开浏览器,再次访问该网站,发现cookie没有了。
给Cookie设置有效期
//服务器给客户端响应一个cookie
Cookie cookie = new Cookie("lastTime", System.currentTimeMillis()+""); //创建一个Cookie
//给Cookie设置有效期为一天
cookie.setMaxAge(24*60*60);
resp.addCookie(cookie); //相应给客户端
当你关闭浏览器,cookie不会被清空了,有效期为1天
-
删除Cookie
-
不设置有效期,关闭浏览器,自动失效
-
设置有效期时间为0,立即失效。
-
-
关于Cookie
-
一个Cookie只能保存一个信息
-
一个web站点可以给浏览器发送多个cookie,最多存放20个cookie
-
Cookie大小有限制,为4kb
-
浏览器上限为300个Cookie
-
编码解码:
//编码
URLEncoder.encode("张三","utf-8");
//解码
URLDecoder.decode("张三","utf-8");