springboot的Cookie使用(添加/查询,设置过期时间)

本文介绍了如何在SpringBoot中使用Cookie,包括添加Cookie、设置Cookie过期时间和查询Cookie。通过CookieUtils工具类和实体Bean进行操作,并提供了测试示例,演示了最多保留4条Cookie记录的逻辑。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

springboot的Cookie使用(添加cookies,获取/查询cookies,设置cookies过期时间)

上篇博客说到的做"历史浏览记录"使用到的cookie.这里记录一下,方便今后学习使用!!!

lombok依赖

<!--lombok插件-->
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <optional>true</optional>
</dependency>

CookieUtils工具类

package com.example.demo.util;

import javax.servlet.http.Cookie;

public class CookieUtils {

    /**
     * 寻找指定 cookieName 的cookie
     * @param cookies
     * @param cookieName
     * @return
     */
    public static Cookie getCookie(Cookie[] cookies, String cookieName) {
        if (null == cookies) {
            return null;
        } else {
            for (Cookie cookie : cookies) {
                if (cookie.getName().equals(cookieName)) {
                    return cookie;
                }
            }
            return null;
        }
    }
}

实体Bean

HistoryBo

package com.example.demo.controller;

import lombok.Data;

@Data
public class HistoryBo {

    private String userId;
    private Long spuId;
}

Product

package com.example.demo.bo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@NoArgsConstructor
@AllArgsConstructor
public class Product {

    private String id;
    private String title;
    private String price;
    private String producturl;
    private Double pic;
}

添加Cookie

将spuId的拼接好的字符串返回去.格式为:17#16#15#14.cookiesName为:userId
最新增加到cookie里的在最前面,这里只保留4条cookies记录

/**
     * 添加历史记录到Cookie中
     * @param request
     * @param response
     */
    @PostMapping("/add")
    public String addMarket(@RequestBody HistoryBo bo, HttpServletRequest request, HttpServletResponse response){

        Cookie[] cookies = request.getCookies();
        Cookie cookie = CookieUtils.getCookie(cookies, bo.getUserId());

        String userIds = "";
        if(null != cookie){
            userIds = cookie.getValue();
            if(userIds.indexOf("#") > 0){
                String[] str = userIds.split("#");
                boolean flag = false;
                for (String s : str) {
                    if(s.equals(bo.getSpuId().toString())){
                        flag = true;
                        break;
                    }
                }

                if(!flag){
                    if (str.length > 3) {
                        // 历史记录只保存4个,新增的会覆盖掉最先新增的
                        userIds = userIds.substring(0, userIds.lastIndexOf("#"));
                        userIds = bo.getSpuId().toString() + "#" + userIds;
                        cookie = new Cookie(bo.getUserId(), userIds);
                        response.addCookie(cookie);
                    } else {
                        userIds = bo.getSpuId().toString() + "#" + userIds;
                        cookie = new Cookie(bo.getUserId(), userIds);
                        response.addCookie(cookie);
                    }
                }
            } else {
                if (!userIds.equals(bo.getSpuId().toString())){
                    userIds = bo.getSpuId().toString() + "#" + userIds;
                    cookie = new Cookie(bo.getUserId(), userIds);
                    response.addCookie(cookie);
                }
            }
        } else {
            cookie = new Cookie(bo.getUserId(), bo.getSpuId().toString());
            response.addCookie(cookie);
        }

        return userIds;
    }

cookie的过期时间设置

	 // 不记录cookie
	 cookie.setMaxAge(0);
	 // 会话级cookie,关闭浏览器失效
	 cookie.setMaxAge(-1);
	 // 过期时间为1小时单位是秒
	 cookie.setMaxAge(60 * 60);

获取/查看Cookies

/**
     * 读取cookies存储数据
     * @param request
     * @param response
     * @return
     */
    @GetMapping("/get")
    public List<Product> getProducts(String cookieName, HttpServletRequest request, HttpServletResponse response) {

        List<Product> list = new ArrayList<>();
        Cookie[] cookies = request.getCookies();
        Cookie cookie = CookieUtils.getCookie(cookies, cookieName);
        if(null == cookie){
            return new ArrayList<>();
        }

        String values = cookie.getValue();
        String[] str = values.split("#");
        for (String id : str) {
            // TODO 根据id获取商品
            Product product = new Product();
            product.setId(id);
            list.add(product);
        }
        return list;
    }

测试

新增

在这里插入图片描述

获取/查看cookies

在这里插入图片描述
get请求.只有4条数据.结果是OK!!!

欢迎大佬们留言评论,共同学习!!!感谢!!!

===========================
原创文章,转载注明出处!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值