本帖最后由 marco 于 2022-10-6 12:25 编辑
一个模板
public class Cookiedemo1 extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws Exception { // 创建Cookie对象,保存会话数据 // 如果发送中文,必须先使用URLEncoder进行加密 String name = URLEncoder.encode("张三", "utf-8"); Cookie c1 = new Cookie("name", name); Cookie c2 = new Cookie("email", "chen@c.com"); // 发送cookie response.addCookie(c1); response.addCookie(c2); // 浏览器下次访问获取已有的cookie Cookie[] cookies = request.getCookies(); if (cookies != null) { for (Cookie cookie : cookies) { // cookie的名 String cname = cookie.getName(); // cookie的值 String cvalue = cookie.getValue(); // 解密 cvalue = URLDecoder.decode(cvalue, "utf-8"); System.out.println(cname + "=" + cvalue); } } else { System.out.println("没有cookie信息!"); } }}
JavaScript 操作Cookie
操作方法 //创建一个Cookie,属性默认document.cookie="password=123456";//创建一个Cookie,设置属性:过期时间,pathdocument.cookie="attribute=pathDomain; expires=Thu, 14 Dec 2021 12:00:00 GMT; path=/";//读取Cookie,返回name1=value1;...;namen=valuen 形式的字符串document.cookie;//修改Cookie,重新创建一遍,name相同会覆盖之前Cookie,修改了过期时间document.cookie="attribute=pathDomain; expires=Thu, 14 Dec 2020 12:00:00 GMT; path=/";//删除Cookie,可以指定过期时间为当前时间;注意:因为过期时间以浏览器的服务器时间为准,一般会有八小时时差document.cookie="password=123; expires=" + new Date();
例子
//创建Cookie,并设置有效期(单位天)function setCookie(cname,cvalue,exdays){ var d = new Date(); d.setTime(d.getTime()+(exdays*24*60*60*1000)); var expires = "expires=" + d.toGMTString(); document.cookie = cname + "=" + cvalue + "; " + expires;}//获取对应Cookie的值,通过字符串截取的方式function getCookie(cname){ var name = cname + "="; var ca = document.cookie.split(';'); for(var i=0; i<ca.length; i++) { var c = ca.trim(); if (c.indexOf(name)==0) return c.substring(name.length,c.length); } return "";}//删除Cookie,过期时间提前1天,解决时差问题function delCookie(cname){ var d = new Date(); d.setTime(d.getTime()-(24*60*60*1000)); var expires = "expires=" + d.toGMTString(); document.cookie = cname + "=; " + expires;}
应用使用cookie进行自动登录的服务器代码 //如果cookie中有customer信息,就放到session中 boolean checkCustomerCookie(HttpServletRequest request) throws UnsupportedEncodingException { Cookie[] cookies = request.getCookies(); if (cookies != null) { for (Cookie cookie : cookies) { String cookieName = cookie.getName(); //如果有,解密后拿cookie中的值和数据库中的值进行比较 if (Constant.cookieCustomerKey.getName().equals(cookieName)){ String cookieValue = cookie.getValue(); String decry = EncrypUtils.Base64Util.decry(cookieValue); Customer customer1 = JsonUtils.stringToObject(decry, Customer.class); Customer customer2 = customerService.checkLogin(customer1.getPhoneNumber(), customer1.getPassword()); if (customer2 != null){ //放入到session中,放行 request.getSession().setAttribute("customer",customer2); //自动登录时,更新用户的在线状态 Customer onlineCustomer = new Customer(); onlineCustomer.setId(customer2.getId()); onlineCustomer.setOnlineStatus(String.valueOf(Constant.ONLINESTATUS.getCode())); customerService.updateById(onlineCustomer); return true; } } } } return false; }
4、Cookie 编码cookie中存储中文会出现中文乱码,需要对value进行额外的编码 base64编码存储:Base64.getEncoder().encodeToString(content.getBytes("utf-8")); 读取:new String(Base64.getDecoder().decode(cookie.getValue()),"utf-8") URLEncoder类存储:Cookie cookie = new Cookie("userName", URLEncoder.encode("你好世界", "UTF-8")); 读取:URLDecoder.decode(cookie.getValue(), "UTF-8")
|