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用于防止跨站点脚本(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/
目录
×

喜欢就点赞,疼爱就打赏