springboot中使用cookie

1.cookie是什么

cookie是浏览器访问服务器后由服务器生辰并传给浏览器的一种数据,浏览器会保存服务器传给它的cookie并且每次访问服务器都会带上cookie

2.cookie的使用

一般是登陆时前端请求后端接口,后端生成cookie并把常用值放进cookie,将cookie放到response中返回给浏览器

demo如下

package com.example.test.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;

import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

@Controller
public class CookieController {

    private static int cookieCount;

    @GetMapping(value = "/addCookies")
    public void addCookies(HttpServletResponse response) throws IOException {

        //设置contentType,解决中文乱码
        response.setContentType("text/html;charset=utf-8");

        String name = "cookie_" + (++cookieCount);
        String value = String.valueOf(System.currentTimeMillis());
        Cookie cookie = new Cookie(name, value);

        /*cookie的其他属性

        除了必填属性名称和值之外,您还可以使用以下方法为Cookie指定其他信息:
        setComment(String):指定描述cookie用途的注释。
        例如:
        cookie.setComment("This cookie stores timestamp");

        setDomain(String):指定在其中可见此cookie的域名。默认情况下,cookie只返回给发送它们的服务器。因此,设置域名将使Cookie可用于同一域名下的不同服务器。
        例如:
        cookie.setDomain(".csdn.net");
        该cookie将可用于域代码csdn.net下的所有服务器。请注意,域名应以点开头。下面的示例将cookie的域设置为localhost:
        cookie.setDomain("localhost");

        setHttpOnly(boolean):如果设置为true,则Javascript无法在客户端读取此cookie,从而可以防止某些跨站点脚本攻击。
        例如:
        cookie.setHttpOnly(true);

        setMaxAge(int):指定cookie在用户计算机中存储的时间,以秒为单位。如果未设置,则退出Web浏览器时将删除cookie。
        例如:
        cookie.setMaxAge(7 * 24 * 60 * 60);
        这将cookie的生存期设置为7天(= 24小时x 60分钟x 60秒),并且当存在浏览器时,它仍存储在用户的计算机上。

        setPath(String):如果要限制cookie在服务器上的某个路径(及其子路径)中可用,请使用此方法。
        例如:
        cookie.setPath("/product");

        setSecure(boolean):如果设置为true,则仅在使用安全协议(HTTPS或SSL)时将cookie从浏览器发送到服务器。默认为false。
         */
        response.addCookie(cookie);
        response.getWriter().println(name+"创建成功");
    }

    @GetMapping(value = "/readCookies")
    public void readCookies(HttpServletRequest request, HttpServletResponse response) throws IOException {
        //设置contentType,解决中文乱码
        response.setContentType("text/html;charset=utf-8");

        PrintWriter writer = response.getWriter();

        Cookie[] cookies = request.getCookies();

        if (cookies == null) {
            writer.println("从request中未读取到cookie");
        } else {
            writer.println("cookie数量: " + cookies.length);

            for (Cookie aCookie : cookies) {
                String name = aCookie.getName();
                String value = aCookie.getValue();

                writer.println(name + " = " + value);
            }
        }
    }


    @GetMapping(value = "/deleteCookies")
    public void deleteCookies(HttpServletRequest request, HttpServletResponse response) throws IOException {
        //设置contentType,解决中文乱码
        response.setContentType("text/html;charset=utf-8");

        PrintWriter writer = response.getWriter();

        Cookie[] cookies = request.getCookies();

        if (cookies != null) {
            for (Cookie aCookie : cookies) {
                aCookie.setMaxAge(0);
                response.addCookie(aCookie);
            }

            writer.println("所有cookie已删除");
        } else {
            writer.println("从request中未读取到cookie");
        }

    }


}

一个简单的html页面

<html>
<head>
<meta charset="UTF-8">
<title>cookie test</title>
</head>
<body>
	<div align="center">
		<h1>cookie example</h1>
		
		<h2><a href="addCookies">Add Cookies</a></h2>
		<h2><a href="readCookies">Read Cookies</a></h2>
		<h2><a href="deleteCookies">Delete Cookies</a></h2>
		
	</div>
</body>
</html>

启动工程,点击Add Cookies,运行结果

后端放进response的cookie已经被浏览器保存

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值