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();//忽略其他代码...
}