Java中的Cookie使用

Cookie技术在浏览器端用于存储请求数据,简化用户输入。本文介绍了Cookie的两种存储方式,临时存储和定时存储,以及浏览器对Cookie大小和数量的限制。通过SetMaxAge设置Cookie的存活时间,正值表示持久化存储,零则删除。早期的Cookie不支持中文存储,但在Tomcat 8以后得到了改进。通过设置path,还能实现不同项目间的Cookie共享。

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

Cookie 技术其实是浏览器端的数据存储技术,解决了不同请求需要使用相同的请求数据的问题。我们把请求需要共享的请求数据,存储在浏览器端,避免用户进行重复的书写请求数据。特点:Cookie技术是浏览器端的数据存储技术,通过键值对的方式来存储数据,适合少量的数据,Cookie技术是不安全的。Cookie有两种数据存储方式,一种是临时存储,不设置 cookie 信息的存储时间,周期为一次会话,存储在浏览器内存中;还有一种是定时存储,设置存储时间,周期为时间设置,存储在用户电脑中。浏览器对于单个Cookie的大小有限制(4kb)以及对同一个域名下的总Cookie数量也有限制(20个)。

1、 一次可以发送多个Cookie,默认情况下,当浏览器关闭后,Cookie数据就被销毁,

/*创建Cookie*/
    @RequestMapping("/cookieDome")
    @ResponseBody
    public void cookieDome(HttpServletResponse response){
        //1、创建Cookie对象
        Cookie c = new Cookie("user","zhangsan");
        Cookie h = new Cookie("password","123456");
        //2、发送Cookie
        response.addCookie(c);
        response.addCookie(h);
    }
    
    /*获取Cookie*/
    @RequestMapping("/cookieDome2")
    @ResponseBody
    public void cookieDome2(HttpServletRequest request){
        //3、获取Cookie
       Cookie[] cs = request.getCookies();
       //获取数据。遍历Cookie
        if(cs!=null){
            for (Cookie c:cs){
                System.out.println(c.getName());//打印:user,password
                System.out.println(c.getValue());//打印:zhangsan,123456
            }
        }

    }

2、 设置Cookie的存活时间,如果被持久化存储,要等设置时间过或手动设置过期,Cookie才会被销毁。 SetMaxAge(整数):
2-1、正数:将Cookie数据写到硬盘的文件中。持久化存储。并指定cookie存活时间,时间到后, Cookie文件自动失效
2-2、负数:默认值
2-3、 零:删除Cookie信息

/*设置Cookie存活时间*/
    @RequestMapping("/cookieDome3")
    @ResponseBody
    public void cookieDome3(HttpServletResponse response){
        //1、创建Cookie对象
        Cookie c = new Cookie("user","lisi");
        //2、设置cookie存活时间
        //将cookie持久化到硬盘,30秒后会自动删除cookie文件
        c.setMaxAge(30);
        //默认值
        // c.setMaxAge(-2);
        //3、发送Cookie
        response.addCookie(c);
    }
    
    /*销毁Cookie信息*/
    @RequestMapping("/cookieDome4")
    @ResponseBody
    public void cookieDome4(HttpServletRequest request,HttpServletResponse response){
        //4、获取Cookie
        Cookie[] cs = request.getCookies();
        //获取数据。遍历Cookie
        if(cs!=null){
            for (Cookie c:cs){
                if(c.getName().equals("user")){
                    //直接删除cookie信息
                    c.setMaxAge(0);
                    //发送Cookie
                    response.addCookie(c);
                    break;
                }
            }
        }
    }

3、Cookie中文问题:
3-1、在tomcat 8之前Cookie中不能直接存储中文数据。需要将中文数据转码—一般采用URL编码(%E3) (包括空格也要用)
在这里插入图片描述
3-2、在tomcat 8之后, cookie支持中文数据。

4、Cookie共享:设置path,让当前服务器下部署的所有项目共享Cookie信息

@RequestMapping("/cookieDome5")
    @ResponseBody
    public void cookieDome5(HttpServletResponse response){
        //1、创建Cookie对象
        Cookie c = new Cookie("msg","共享");
        //设置path,让当前服务器下部署的所有项目共享Cookie信息
        c.setPath("/"); //8080端口根目录
        //3、发送Cookie
        response.addCookie(c);
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值