1、什么是 Cookie
Cookie 是网站服务器发送到客户端(通常是浏览器)的一小段数据,用于在客户端存储用户信息,以便在用户再次访问网站时提供更好的体验。当用户在浏览器中访问某个网站时,服务器可能会在用户的计算机上创建一个 Cookie。这个 Cookie 包含了服务器的某些信息,如用户的登录状态、个性化设置等。当用户再次访问该网站时,浏览器会自动将这些 Cookie 发送给服务器,服务器通过读取这些信息来识别用户并提供相应的服务。
1.1 Cookie 的用途
用户身份识别:通过 Cookie 可以标识和识别用户,帮助网站记住用户的登录状态和个性化设置。
购物车和购买记录:在网上购物时,Cookie 可以跟踪用户添加到购物车中的商品和购买记录,确保购物过程的连续性和方便性。
网站分析和统计:网站使用 Cookie 来收集匿名的用户访问数据,如访问次数、页面浏览量、用户行为等,以用于网站的分析和优化。
广告定向:一些广告商使用 Cookie 来跟踪用户在网上的活动,从而投放更加相关和个性化的广告。
网站功能优化:Cookies 还可以用于网站功能的优化,例如记住用户选择的语言、地区等。
1.2 安全性与隐私
安全性:Cookie 本身并不包含病毒或恶意软件,但它们可以被用于跟踪用户的在线活动,从而可能引发隐私泄露的风险。因此,使用 Cookie 时需要谨慎处理用户数据,并遵守相关的隐私政策和法律法规。
隐私保护:为了保护用户的隐私,许多浏览器都提供了清除 Cookie 的功能。用户可以随时选择删除计算机上的 Cookie,以避免个人信息被泄露或滥用。
2、创建 Cookie 工具类
在 SpringBoot 项目中,后端需要经常操作 Cookie 对象,所有创建 Cookie 工具类可以提高开发效率。
创建 CookieUtil 类(Cookie公共方法类):
package com.pjb.ems.util;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Cookie公共方法类
* @author pan_junbiao
**/
public class CookieUtil
{
/**
* 写入 Cookie 对象
* 过期时间(单位为秒):-1:负数永不过期;0:则立马过期
*/
public static void writeCookie(String name, String value, int maxAge, HttpServletResponse response)
{
Cookie cookie = new Cookie(name, value);
cookie.setMaxAge(maxAge); // 设置过期时间(单位为秒)
cookie.setDomain("127.0.0.1"); // 设置域名,实现跨域功能
cookie.setPath("/");
response.addCookie(cookie);
}
/**
* 读取 Cookie 的值
*/
public static String readCookie(String name, HttpServletRequest request)
{
String value = null;
Cookie[] cookies = request.getCookies();
if (cookies != null && cookies.length > 0)
{
for (Cookie cookie : cookies)
{
if (name.equals(cookie.getName()))
{
value = cookie.getValue();
break;
}
}
}
return value;
}
/**
* 删除 Cookie 对象
*/
public static void deleteCookie(String name, HttpServletRequest request, HttpServletResponse response)
{
Cookie[] cookies = request.getCookies();
if (cookies != null && cookies.length > 0)
{
for (Cookie cookie : cookies)
{
if (name.equals(cookie.getName()))
{
cookie.setMaxAge(0); // 设置有效时间为0秒的时候:创建完cookie后,则立马过期(删除);
cookie.setPath("/");
response.addCookie(cookie);
}
}
}
}
}
3、知识补充
在 SpringBoot 项目中,后端如何获取 HttpServletRequest、HttpServletResponse 和 HttpSession 对象?
SpringBoot 如何获取 HttpServletRequest、HttpServletResponse 和 HttpSession 对象:
详细方法,请求点击浏览文章:《SpringMVC获取HttpServletRequest、HttpServletResponse和HttpSession对象的3种方法》
后端代码,可以通过ServletRequestAttributes对象。
/**
* 获取信息
*
* @author pan_junbiao
*/
@RequestMapping(value = "/getInfo")
public void getInfo()
{
//获取ServletRequestAttributes对象
ServletRequestAttributes servletRequestAttributes = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes());
//获取HttpServletRequest对象
HttpServletRequest request = servletRequestAttributes.getRequest();
//获取HttpServletResponse对象
HttpServletResponse response = servletRequestAttributes.getResponse();
//获取HttpSession对象
HttpSession session = servletRequestAttributes.getRequest().getSession();
//忽略其他代码...
}