Cookie是一种在客户端存储数据的机制,它通常用于Web应用程序中以跟踪用户会话和保存用户偏好设置等信息。当Web服务器向客户端发送响应时,可以附加一个或多个Cookie。客户端浏览器会将这些Cookie存储在本地,并在后续的HTTP请求中将它们发送回服务器。
Cookie由名称、值、过期时间、路径和域组成。名称和值是必需的,用于唯一标识Cookie和存储相关的数据。过期时间告诉浏览器何时应该删除Cookie。路径指定哪些URL可以访问Cookie,域指定哪些主机可以访问Cookie。
Cookie的存入代码演示
String Msg = "xxx"; //定义一般消息
int onlineTagMsg = 0; //0为下线,1为在线,定义用户状态
String signMsg = "xxx"; //需要定义一个信号源,检测购物车状态等案例
Cookie cookie = new Cookie("Msg", String.valueOf(Msg));
cookie.setMaxAge(86400);//保留一天
response.addCookie(cookie);
Cookie cookieToCheckState = new Cookie("userOnline", String.valueOf(onlineTagMsg));
cookieToCheckState.setMaxAge(86400);
response.addCookie(cookieToCheckState);
Cookie cookieToSign = new Cookie("Sign", String.valueOf(signMsg));
cookieToSign.setMaxAge(86400);
response.addCookie(cookieToSign);
遍历Cookie代码演示
Cookie[] cookies = request.getCookies();
if (cookies != null) {
for (Cookie cookie : cookies) {
String key = cookie.getName(); // 获取 cookie 的键
String value = cookie.getValue(); // 获取 cookie 的值
// 根据需要进行处理
System.out.println("Cookie Key: " + key);
System.out.println("Cookie Value: " + value);
}
}
效果展示
总结
如何一个class文件需要存储多个键与值的cookie对时,可以直接使用Cookie cookie1、2、3 = new Cookie(xx,xx)以避免混淆。
代码如下:
前端代码↓
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>myHome</title>
</head>
<body>
<h1>欢迎来到我的主页</h1>
<%
String onlineTag = null;
//测试
String keyz1 = null;
String keyz2 = null;
String keyz3 = "";//!!!
Cookie[] cookies = request.getCookies();
if (cookies != null) {
for (Cookie cookie : cookies) {
String key = cookie.getName(); // 获取 cookie 的键
String value = cookie.getValue(); // 获取 cookie 的值
// 根据需要进行处理
System.out.println("Cookie Key: " + key);
System.out.println("Cookie Value: " + value);
if (key.equals("key1")) {
keyz1 = value;
}
if (key.equals("key2")) {
//user_id = Integer.parseInt(value); // 将Cookie的值转换为整型
keyz2 = value;
}
if (key.equals("key3")) {
keyz3 = value;
}
if (key.equals("onlineTag")) {
onlineTag = value;
}
}
}
%>
onlineTag = <%=onlineTag%>
keyz1 = <%=keyz1%>
keyz2 = <%=keyz2%>
keyz3 = <%=keyz3%>
</body>
</html>
Servlet层↓
//将inputCode传入cookie作为在线标识onlineTag
Cookie cookie = new Cookie("onlineTag", String.valueOf(inputCode));
cookie.setMaxAge(86400);//保留cookie一天
response.addCookie(cookie);
String key1 = "你好";
String key2 = "师姐";
String key3 = "我不是师姐,我是师娘";
Cookie cookie1 = new Cookie("key1",String.valueOf(key1));
cookie1.setMaxAge(86400);
response.addCookie(cookie1);
Cookie cookie2 = new Cookie("key2",String.valueOf(key2));
cookie2.setMaxAge(86400);
response.addCookie(cookie2);
Cookie cookie3 = new Cookie("key3",String.valueOf(key3));
cookie3.setMaxAge(86400);
response.addCookie(cookie3);
response.sendRedirect("myHome.jsp");
敲重点
一、cookie中尽量不要输入中文 ,避免乱码
/* Cookie cookie1 = new Cookie("key1",String.valueOf(key1));
cookie1.setMaxAge(86400);
response.addCookie(cookie1);
Cookie cookie2 = new Cookie("key2",String.valueOf(key2));
cookie2.setMaxAge(86400);
response.addCookie(cookie2);
Cookie cookie3 = new Cookie("key3",String.valueOf(key3));
cookie3.setMaxAge(86400);
response.addCookie(cookie3);*/
Cookie cookie1 = new Cookie("key1", URLEncoder.encode(key1, "UTF-8"));
cookie1.setMaxAge(86400);
response.addCookie(cookie1);
Cookie cookie2 = new Cookie("key2", URLEncoder.encode(key2, "UTF-8"));
cookie2.setMaxAge(86400);
response.addCookie(cookie2);
Cookie cookie3 = new Cookie("key3", URLEncoder.encode(key3, "UTF-8"));
cookie3.setMaxAge(86400);
response.addCookie(cookie3);
二、String a = ""; 和 String b = null; 的区别
在Java中,String a = "";
和String b = null;
是不同的。
String a = "";
创建了一个空字符串对象,它的长度为0。这意味着a
变量指向一个存在的、有效的字符串对象,但它的内容是空的。对a
执行各种字符串操作(例如连接、查找和替换等)都是合法的,因为a
是一个有效的字符串对象。
String b = null;
创建了一个空引用,这表示b
变量没有指向任何有效的对象。如果尝试对b
进行字符串操作(例如连接、查找和替换等),则会引发NullPointerException
异常。因此,在使用b
之前必须将其初始化为一个有效的字符串对象。
需要注意的是,虽然String a = "";
和String b = null;
的行为不同,但它们都创建了一个空字符串对象。如果只想检查一个字符串是否为空,可以同时使用空字符串和空引用检查:
if (str == null || str.isEmpty()) {
// 字符串为空
}
改进后效果展示(尽量不要存中文)
响应页 添加 request.setCharacterEncoding("UTF-8"); 后续可以用过滤器完善