【十六】Java 操作cookie
阿新 • • 發佈:2018-12-18
cookie的讀、寫、刪
package com.sid.util; import com.alibaba.fastjson.JSON; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.UnsupportedEncodingException; import java.util.HashMap; import java.util.Map; /** * @program: * @description: 操作cookie * @author: Sid * @date: 2018-11-01 18:15 * @since: 1.0 **/ public class Cookie { /** * @Description: 寫cookie * @Param: [key, value, comment, maxAge] * @return: void * @Author: Sid * @Date: 2018-10-23 17:33 * @since: 1.0 */ public static void set(String key, String value, String comment, int maxAge){ HttpServletResponse response = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getResponse(); // 建立Cookie物件 javax.servlet.http.Cookie cookie = new javax.servlet.http.Cookie(key, value); // 配置Cookie物件 cookie.setComment(comment); // Cookie描述 cookie.setMaxAge(maxAge); // Cookie有效時間 cookie.setPath("/"); // Cookie有效路徑 cookie.setHttpOnly(true); //http only // 通過response物件將Cookie寫入瀏覽器,需要解決中文亂碼問題,否則會丟擲異常 // java.lang.IllegalArgumentException: Control character in cookie value, consider BASE64 encoding your value response.setCharacterEncoding("UTF-8"); //response.setContentType("text/html;charset=UTF-8"); response.addCookie(cookie); } /** * @Description: 讀Cookie * @Param: [name] * @return: javax.servlet.http.Cookie * @Author: Sid * @Date: 2018-10-23 17:33 * @since: 1.0 */ public static javax.servlet.http.Cookie get(String name){ HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); Map<String, javax.servlet.http.Cookie> cookieMap = new HashMap<>(); javax.servlet.http.Cookie[] cookies = request.getCookies(); if (null != cookies) { for (javax.servlet.http.Cookie cookie : cookies) { cookieMap.put(cookie.getName(), cookie); } } if (cookieMap.containsKey(name)) { javax.servlet.http.Cookie cookie = cookieMap.get(name); return cookie; } else { return null; } } /** * @Description: 刪除 當前請求中的 cookie * @Param: [cookieName] * @return: void * @Author: Sid * @Date: 2018-10-23 17:33 * @since: 1.0 */ public static void delete(String cookieName){ HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); HttpServletResponse response = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getResponse(); // 獲取Cookies陣列 javax.servlet.http.Cookie[] cookies = request.getCookies(); if(cookies!=null){ // 迭代查詢並清除Cookie for (javax.servlet.http.Cookie cookie: cookies) { if (cookieName.equals(cookie.getName())) { cookie.setMaxAge(0); cookie.setPath("/"); // Cookie有效路徑 response.addCookie(cookie); } } } } }