javaweb cookie基本操作 以及过期时间设置无效问题解决

关于cookie设置过期无效的问题:

     经过cookie.getMaxAge()获取的值,显示出来永远是-1. 但实际的值并不是-1; 可以通过关闭浏览器测试,cookie还在; 或者设置cookie时间为10,等10秒时间之后,cookie会被删除;
     并不是网上说的要设置 path, domin; 你只要知道:你设置的是对的,不过除了key-value,其余的参数都不可读就行;


cookie的基础知识

    /**
     *  cookie 是服务器 存储数据到 浏览器 的一种技术,用于跟踪客户状态。比如证明客户身份: 是否是第一次访问,是否已经登录等
     * 
     *  cookie流程:
     *     1.客户端首次访问服务器,服务端会现在客户端存留该客户的相关信息的cookie;
     *     2.以后客户每次访问服务器时,都会在HTTP请求中包含cookie数据,服务器解析cookie,就能得到客户的信息;
     *  
     *  cookie操作:   
     *     服务器
     *            1.在HTTP响应结果中添加Cookie数据。
     *                  Cookie theCookie = new Cookie("username","Tom");
     *                  response.addCoolie( theCookie );
     *        2.解析HTTP请求中的Cookie数据。
     *              Cookie cookies[] = response.getCookies();
     *              for( int i=0; i<cookies.length; i++ ){
     *                  out.println("Cookie key: "+cookie[i].getName() );
     *                  out.println("Cookie value: "+cookie[i].getValue() );
     *              }
     *        
     *     浏览器(自动操作)
     *        1.如果响应体中携带cookies,那么解析HTTP响应结果中的Cookie数据,并存到本地磁盘。
     *        2.如果本地磁盘中存有cookies,将cookie中保存的数据全部读取并添加到HTTP请求中。
     *        
     *   cookie有效期设置
     *      Servlet可以通过Cookie类的getMaxAge()方法获取Cookie的有效期;
     *      Servlet可以通过设置Cookie类的setMaxAge( int expiry );   
     *      
     *      //expiry默认值为 -1;
     *      1.如果expiry大于0,则保存有效期为expire时间长度,单位毫秒;
     *      2.如果expiry等于0,则指示浏览器删除当前cookie;
     *      3.如果expiry小于0,则指示浏览器不保存该cookie到硬盘,就保存在内存中,浏览器关闭就消失;  
     *      
     *   关于Cookie是否是同一条判断标准
     *      可以理解为: 如果存在同一个key,那么后一条覆盖前一条; value被覆盖,保存方式以及过期时间也被覆盖;   
     * */


cookie案例代码

    代码:
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        response.setContentType("text/html;charset=utf-8");
        PrintWriter out = response.getWriter();
        //获取HTTP请求中的所有cookies
        Cookie cookies[] = request.getCookies();
        if( cookies == null ) {

            out.println("首次访问,没有cookie");
        }else {
            for( int i=0; i<cookies.length; i++ ) {

                Cookie cookie = cookies[i];
                out.println( "<br>Cookie name:"+cookie.getName() );
                out.println( "<br>Cookie value:"+cookie.getValue() );
                out.println( "<br>Max Age: "+cookie.getMaxAge()+"<br>" );
                //修改cookie
                if( cookie.getValue().equals("cookieValue2") ) {
                    cookie.setValue("cookieValue-1");
                }
                //删除cookie
                if( cookie.getValue().equals("cookieValue4") ) {

                    //cookie.setPath("/");//设置成跟写入cookies一样的
                    cookie.setMaxAge(0);    
                }
                //cookie.setMaxAge();
                //cookie.setPath(request.getContextPath());
                //response.addCookie(cookie);
            }
            out.println("第"+count+"访问");
        }

        //向浏览器端编写一个cookie
        Cookie cookie = new Cookie( "cookieName"+count,"cookieValue"+count );
        //cookie.setPath(request.getContextPath());
        cookie.setMaxAge(10);
        response.addCookie(cookie);

        count++;
        out.println(count);
        //out.println(request.getContextPath()+"/");
    }

Domain, Path的设置
    cookie读取与设置的基本原理:
        1. 先匹配 响应头中的设置的 domain, 一般就是域名
        2. 在匹配 path,默认为 “/应用名字/”

       1) 同一个tomcat下多个webapp共享cookie:
           此时:默认的Domain是一样的,所以不需要设置; path不一样,那么就强制设置为同一个path即可,那么久都能访问到指定的Cookie了。
        2)不同服务器下的webapp共享cookie:
          则强制指定domin路径;

—————– 已完成,暂无更新 ———————

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值