【JavaWeb】11-Cookie技术的使用

本文详细讲解了Cookie技术在实现'记住我'功能中的应用,涉及创建、有效期设置、数据加密,并演示了如何通过Java实例操作Cookie。还介绍了如何避免RFC6265限制,以及在复杂场景中如博客个性化设置中的使用策略。
摘要由CSDN通过智能技术生成

cookie技术的最长使用实例就是记住我的功能

学习前注意几点:

  1. 默认情况下,cookie的存活时间为一次会话(不是0秒),当浏览器关闭时,cookie会清除
  2. session中的数据保存在服务器,cookie中的数据保存在浏览器
  3. cookie会以文件的形式保存在磁盘,浏览器中也可以随时查看到,不安全
  4. 建议cookie中保存的数据加密
  5. 服务器获取浏览器的cookie,只能是本服务器生成的cookie,不能获取到其他服务器的cookie

cookie的相关方法:

  1. 创建cookie
Cookie cookie = new Cookie(name, value);
  1. 设置cookie的存活时间
cookie.setMaxAge(n秒);
  1. 将cookie保存到浏览器
response.addCookie(cookie);
  1. 获取浏览器中的所有cookie
Cookie[] cookies = request.getCookies();

实例:通过复选框实现记住我

//得到表单提交的数据
String rememberMe = request.getParameter("rememberMe");

//实现记住我业务
if ("1".equals(rememberMe)) {
	// 创建三个cookie
	Cookie usernameCookie = new Cookie("username", username);
	Cookie passwordCookie = new Cookie("password", password);
	Cookie rememberMeCookie = new Cookie("rememberMe", rememberMe);
	
	// 设置存活时间7天,单位:秒。
	usernameCookie.setMaxAge(60 * 60 * 24 * 7);
	passwordCookie.setMaxAge(60 * 60 * 24 * 7);
	rememberMeCookie.setMaxAge(60 * 60 * 24 * 7);
	
	// 写到浏览器
	response.addCookie(usernameCookie);
	response.addCookie(passwordCookie);
	response.addCookie(rememberMeCookie);
} else {
	// 创建三个name相同的cookie,设置null即清空
	Cookie usernameCookie = new Cookie("username", null);
	Cookie passwordCookie = new Cookie("password", null);
	Cookie rememberMeCookie = new Cookie("rememberMe", null);
	// 将三个cookie的存活时间设置为0
	usernameCookie.setMaxAge(0);
	passwordCookie.setMaxAge(0);
	rememberMeCookie.setMaxAge(0);
	// 写到客户端,会覆盖之前同名的cookie
	response.addCookie(usernameCookie);
	response.addCookie(passwordCookie);
	response.addCookie(rememberMeCookie);
}

//在login的界面
String username = "";
String password = "";
String rememberMe = null;
Cookie[] cookies = request.getCookies();
for (Cookie cookie : cookies) {
	if (cookie.getName().equals("username")) {
		username = cookie.getValue();
	}
	if (cookie.getName().equals("password")) {
		password = cookie.getValue();
	}
	if (cookie.getName().equals("rememberMe")) {
		rememberMe = cookie.getValue();
	}
}

再将得到的值放入表单的value属性中

cookie技术的补充:

通常我们做类似于博客系统的软件,会在首页设置很多个性化的设置,建多个cookie不合理,这是我们选择使用alibaba的fastjson去将我们的设置对象转成json

LoginCookie loginCookieObject = new LoginCookie(username, password, Integer.valueOf(rememberMe));

String loginCookieJson = JSON.toJSONString(loginCookieObject);
注意:此时不可直接保存,因为cookie协议中不允许包含"符号
 RFC6265 Cookie values may not contain character: ["]

我们需要采用编码:

String loginCookieEncode = URLEncoder.encode(loginCookieJson, "utf-8");

创建cookie

Cookie loginCookie = new Cookie("loginCookie", loginCookieEncode);
//设置生命周期
loginCookie.setMaxAge(60 * 60 * 24 * 7);
//写到浏览器
response.addCookie(loginCookie);

得到cookie

<%
	LoginCookie loginCookie = new LoginCookie("", "", 0);
	Cookie[] cookies = request.getCookies();
	for (Cookie cookie : cookies) {
		if (cookie.getName().equals("loginCookie")) {
		//解码,json转Object
			loginCookie = JSON.parseObject((URLDecoder.decode(cookie.getValue(), "utf-8")), LoginCookie.class);
		}
	}
%>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JeffHan^_^

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值