Cookie的存取

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"); 后续可以用过滤器完善

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值