SpringBoot中Cookie的使用
cookie是浏览器缓存,下次读取优先读取缓存
cookie是以key、value的形式存储的
cookie也是有过期时间:cookie.setMaxAge(0);
设置cookie的过期时间
通过response设置
cookie
session是通过request设置的
cookie是javax.servlet.http.cookie的包,别引错包
¶销毁cookie(将cookie的持续时间设置为0)
// 将Cookie的值设置为null
Cookie cookie = new Cookie("username", null);
//将`Max-Age`设置为0
cookie.setMaxAge(0);
response.addCookie(cookie);
¶通过HttpServletResponse设置cookie,通过HttpServletRequest获取cookie
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@Controller
@RequestMapping("/test")
public class SpringBootTest {
//设置cookie
@RequestMapping("/test1")
public void test1(HttpServletResponse httpServletResponse){
//使用cookie的构造方法,传key,value
Cookie cookie=new Cookie("cookieName","cookie名称");
//设置过期时间,单位:秒
cookie.setMaxAge(maxAge);
//HttpServletResponse的addCookie方法设置cookie
httpServletResponse.addCookie(cookie);
}
@RequestMapping("/test2")
//获取cookie,用request获取,参数请求用name
public @ResponseBody String test2(HttpServletRequest request,String name){
//获取到的cookie是个数组,用数组接收
Cookie [] cookies=request.getCookies();
for (Cookie cookie:cookies){
//获取与cookie相同的名称参数并返回该cookie的value
if(cookie.getName().equalsIgnoreCase(name)){
return cookie.getValue();
}
}
return "cookie名称不匹配";
}
}
¶通过HttpServletResponse设置cookie,通过注解获取cookie
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.CookieValue;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletResponse;
@Controller
@RequestMapping("/test")
public class SpringBootTest {
//设置cookie
@RequestMapping("/test1")
public @ResponseBody String test1(HttpServletResponse httpServletResponse){
//使用cookie的构造方法,传key,value
Cookie cookie=new Cookie("cookieName","cookie名称");
//HttpServletResponse的addCookie方法设置cookie
httpServletResponse.addCookie(cookie);
return "cookie设置成功!!!";
}
@RequestMapping("/test2")
/**
* *****************用注解@CookieValue,************************
* 参数name的值与设置cookie的key相同才能取到设置的value,
* 否则获取到的是defaultValue
*/
public @ResponseBody String test2
(@CookieValue(name="cookieName",defaultValue = "默认的cookie值")String value) {
return value+"!!!";
}
}
¶安全的Cookie
安全的cookie是仅可以通过加密的HTTPS连接发送到服务器的cookie。无法通过未加密的HTTP连接将cookie发送到服务器。也就是说,如果设置了setSecure(true),该Cookie将无法在Http连接中传输,只能是Https连接中传输。
// 创建一个 cookie对象
Cookie cookie = new Cookie("username", "Jovan");
cookie.setSecure(true); //Https 安全cookie
//将cookie对象加入response响应
response.addCookie(cookie);
¶HttpOnly Cookie
HttpOnly cookie用于防止跨站点脚本(XSS)攻击,也就是说设置了Http Only的Cookie不能通过JavaScript的Document.cookie
API访问,仅能在服务端由服务器程序访问。
// 创建一个 cookie对象
Cookie cookie = new Cookie("username", "Jovan");
cookie.setHttpOnly(true); //不能被js访问的Cookie
//将cookie对象加入response响应
response.addCookie(cookie);
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达,邮件至 708801794@qq.com
文章标题:SpringBoot中Cookie的使用
文章字数:654
本文作者:梅罢葛
发布时间:2020-04-28, 01:52:20
最后更新:2020-04-28, 02:07:21
原始链接:https://qiurungeng.github.io/2020/04/28/SpringBoot%E4%B8%ADCookie%E7%9A%84%E4%BD%BF%E7%94%A8/