cookie的简单使用

该博客介绍了Java Web中Cookie的基本操作,包括获取、设置、更新和删除Cookie的示例代码。强调了在设置Cookie时通常需要进行加密处理,但此处未展示加密实现。同时提供了简单的测试用例展示各个操作的效果。

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

    cookie的使用一般用来携带用户信息做身份验证,这里做一些简单的使用cookie,不结合业务,如下:这里没有做cookie的加密处理,一般设置cookie的时候需要加密,加密规则如md5,base64等等。

public class CookieUtils {
    /**
     * 获取cookie集合
     * @param request
     * @return
     */
    public static Cookie[] getCookies(HttpServletRequest request){
        Cookie[] cookies = request.getCookies();
        return cookies;
    }


    /**
     * 设置cookie的值
     * @param request
     * @param response
     * @param cookieName
     * @param cookieValue
     * @param time
     */
    public static void setCookie(HttpServletRequest request, HttpServletResponse response,String cookieName,String cookieValue,Integer time){
        Cookie cookie=new Cookie(cookieName,cookieValue);
        //设置过期时间
        if(time>0){
            cookie.setMaxAge(time);
        }
        //可在同一应用服务器内共享
        cookie.setPath("/");
        //设置跨域共享cookie,tomcat8.0之前以.开头,8.0之后就不需要了
        //cookie.setDomain("demo.com");
        response.addCookie(cookie);
    }

    /**
     * 修改、删除Cookie时,新建的Cookie除value、maxAge之外的所有属性,例如name、path、domain等,都要与原Cookie完全一样。
     * 否则,浏览器将视为两个不同的Cookie不予覆盖,导致修改、删除失败。
     * @param request
     * @param response
     * @param cookieName
     */
    public static void deleteCookie(HttpServletRequest request, HttpServletResponse response,String cookieName){
        Cookie[] cookies = request.getCookies();
        if(null!=cookies) {
            for (Cookie cookie : cookies) {
                if (cookie.getName().equals(cookieName)) {
                    cookie.setValue(null);
                    cookie.setMaxAge(0);// 立即销毁cookie
                    cookie.setPath("/");
                    System.out.println("被删除的cookie名字为:" + cookie.getName());
                    response.addCookie(cookie);
                    break;
                }

            }

        }
    }

    /**
     * 修改cookie
     * @param request
     * @param response
     * @param cookieName
     * @param time
     */
    public static void updateCookie(HttpServletRequest request, HttpServletResponse response,String cookieName,String cookieValue,Integer time){
        Cookie[] cookies = request.getCookies();
        if(null!=cookies) {
            for(Cookie cookie : cookies){
                if(cookie.getName().equals(cookieName)){
                    cookie.setValue(cookieValue);
                    cookie.setPath("/");
                    cookie.setMaxAge(time);
                    response.addCookie(cookie);
                    break;
                }
            }
        }
    }

    /**
     * 根据名称获取具体的cookie值
     * @param request
     * @param cookieName
     * @return
     */
    public static String  getCookieByName(HttpServletRequest request,String cookieName){
        Cookie[] cookies = request.getCookies();
        if(null!=cookies) {
            for(Cookie cookie : cookies){
                if(cookie.getName().equals(cookieName)){
                    return cookie.getValue();
                }
            }
        }
        return "";
    }
}

简单测试:

@RestController
@RequestMapping("/cookie")
@Slf4j
public class CookieController {

    /**
     * 获取所有cookie
     * @return
     */
    @GetMapping("/getCookies")
    public void getCookies(HttpServletRequest request){
        Cookie[] cookies = CookieUtils.getCookies(request);
        for(int i=0;i<cookies.length;i++){
            log.info("cookie的name:{},cookie的值:{}",cookies[i].getName(),cookies[i].getValue());
        }

    }

    @GetMapping("/setCookie")
    public void setCookie(HttpServletRequest request, HttpServletResponse response,String name,String value){
        //An invalid character [32] was present in the Cookie value 不能含有空格
        CookieUtils.setCookie(request,response,name,value,-1);
        log.info("设置cookie的值成功");
    }

    @GetMapping("/updateCookie")
    public void updateCookie(HttpServletRequest request, HttpServletResponse response,String name,String value){
        CookieUtils.updateCookie(request,response,name,value,-1);
        log.info("修改cookie的值成功");
    }

    @GetMapping("/deleteCookie")
    public void deleteCookie(HttpServletRequest request, HttpServletResponse response,String name){
        CookieUtils.deleteCookie(request,response,name);
        log.info("删除cookie的值成功");
    }

    @GetMapping("/get")
    public void getCookie(HttpServletRequest request,String name){
        String v= CookieUtils.getCookieByName(request, name);
        log.info("获取cookie的值成功:"+v);
    }
}

测试结果:

  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值