`

关于设置了setMaxAge(0)而浏览器未成功删除Cookie的注意事项

 
阅读更多
最近做了个系统,其中涉及到对Cookie的操作。当用户登录时,设置一些数据到Cookie中,用户登出系统的时候删除写入浏览器中的对应Cookie。
问题就出在登出系统时,在firebug中看到需要删除的Cookie并没有删除掉。

最后经过自己的debug,终于找到了问题的所在。

直接上代码:
登录时写Cookie:
public void setLoginIDCookie1(HttpServletResponse response, String value) {
        Cookie cookie = new Cookie(loginIdCookieKey, value);
        // 设置cookie的域,如果不设置该属性将不能够写入cookie
        if (!StringUtils.isBlank(domain)) {
            cookie.setDomain(domain);
        }
        // 设置cookie的路径,这个路径即改工程下都可以访问该cookie 如果不设置路径,那么只有设置该cookie的路径及其子路径可以访问
        if (!StringUtils.isBlank(path)) {
            cookie.setPath(path);
        }
        // 设置cookie的过期时间(单位秒)
        if (expiry > 0) {
            cookie.setMaxAge(expiry);
        }
        response.addCookie(cookie);
    }




登出时,删除Cookie:

 public void deleteLoginCookies(HttpServletRequest request, HttpServletResponse response) {
        Cookie[] cookies = request.getCookies();
        if (cookies != null && cookies.length > 0) {
            // 遍历浏览器发送到服务器端的所有Cookie,找到自己设置的Cookie
            for (Cookie cookie : cookies) {
                String cookieName = cookie.getName();
                if (cookieName.equals(loginIdCookieKey)) {
                    // 设置Cookie立即失效
                    cookie.setMaxAge(0);
                    /**
                     * 删除Cookie时,只设置maxAge=0将不能够从浏览器中删除cookie,
                     * 因为一个Cookie应当属于一个path与domain,所以删除时,Cookie的这两个属性也必须设置。
                     * 
                     * 误区:刚开始时,我没有发现客户端发送到服务器端的cookie的path与domain值为空这个问题。
                     * 因为在登陆系统时,我设置了Cookie的path与domain属性的值,就误认为每次客户端请求时,都会把Cookie的
                     * 这两个属性也提交到服务器端,但系统并没有把path与domain提交到服务器端(提交过来的只有Cookie的key,value值)。
                     */
                    // 重点是这里1,必须设置domain属性的值
                    cookie.setDomain(domain);
                    // 重点是这里2,必须设置path属性的值
                    cookie.setPath(path);
                    response.addCookie(cookie);
                }
            }
        }
    }

  • 大小: 30.7 KB
  • 大小: 47.5 KB
分享到:
评论

相关推荐

    WEB16-session&cookie-源代码.rar

    注意:如果不设置持久化时间,cookie会存储在浏览器的内存中,浏览器关闭 cookie信息销毁(会话级别的cookie),如果设置持久化时间,cookie信息会 被持久化到浏览器的磁盘文件里 示例: cookie.setMaxAge(10*60); ...

    关于java应用cookie

    cookieUserName.setMaxAge(60); //Cookie保存时间 //创建用户密码Cookie对象 Cookie cookiePassword = new Cookie("password", password); cookiePassword.setMaxAge(60); //Cookie保存时间 //添加到...

    浅谈Cookie的生命周期问题

    设置Cookie对象的有效时间, setMaxAge()方法便可以设置Cookie对象的有效时间, 例如:Cookie c = new Cookie(“username”,”john”); c.setMaxAge(60);//60秒的意思 c.setMaxAge(60*60);//一小时 c.setMaxAge(365*...

    Cookie的使用及保存中文并用Cookie实现购物车功能

    设置Cookie 代码如下: //设置cookie Cookie cookie = new Cookie(“TOM”,”111″); //设置有效期,默认秒为单位 cookie. setMaxAge(7*24*60*60); //添加cookie到客户端 response.addCookie(cookie); 获取Cookie ...

    关于jsp中cookie丢失问题(详解)

    jsp中设置cookie如果不设置路径,会出现cookie丢失问题 Cookie cookie = new Cookie(cookieName, value); cookie.setMaxAge(3600); cookie.setPath(/); response.addCookie(cookie); 以上这篇关于jsp中cookie丢失...

    Java 创建cookie和删除cookie

    //写cookie操作 Cookie cooki; cooki=new Cookie(“bbs_0001”,String.valueOf(num));//用户ID cooki.setMaxAge(60*60*24*365);//cookie时间 cooki.setPath(“/”); //根据个人的不用,在不同功能的路径下创建 ...

    学生信息管理系统

    cookie setMaxAge 0 ; response addCookie cookie ; } } } request getRequestDispatcher "login jsp" forward request response ; } }else if "loginOut&...

    jsp基础精华详解

    cookie.setMaxAge(24 * 60 * 60 *60); //把Cookie发送到客户端 response.addCookie(cookie); //得到客户端发送的Cookie Cookie [] cookies = request.getCookies(); for(int i=0; i; i++) { Cookie temp = cookies...

    jsp九大内置对象

     调用Cookie对象的setMaxAge()方法便可以设置Cookie对象的有效时间,  例如:Cookie c = newCookie("username","john");  c.setMaxAge(3600);  (6)Cookie应用  Cookie对象的典型应用时用来统计网站的访问...

    java-servlet-api.doc

    客户端选择不加入Session,例如,如果客户端拒绝接收来自服务器的cookie 作为一个Servlet的开发者,你必须决定你的Web应用是否处理客户机不加入或不能加入Session。服务器会在Web服务器或Servlet规定的时间内维持一...

    基于SSM框架+Mysql的企业CRM客户关系管理系统项目源码+数据库+项目说明.zip

    在用户不需要记住密码时,调用setMaxAge方法将cookie的生命周期设置为0,即可销毁cookie 3. 由于使用thymeleaf暂时没找到操作cookie的方法,故此导入vue-cookie包,使用vue操作cookie 4. 在vue中,不能用$...

    数据库测试test.sql

    cookie1.setMaxAge(0); cookie2.setMaxAge(0); } //4.将会员卡带回家 response.addCookie(cookie1); response.addCookie(cookie2); //成功跳转到成功页面 //out.println("登录成功"); // /servlet/...

    jsp使用cookie存储中文示例分享

    看J2EE的时候,看见书上讲到使用cookie保存信息的时,看到书上举得例子都是英文的键值对,我就想中文是不是一样呢?试了一下果然不一样。废话不多说,直接上代码: 比如说有addCookie.jsp代码如下: 代码如下:<...

    javajichuzhishi

    public static void addCookie(String name, String value,int age, HttpServletResponse response) ... cookie.setMaxAge(age); cookie.setPath(path); response.addCookie(cookie); }

    Asp.NET性能优化之减少请求

    在上篇《ASP.NET性能优化之让浏览器缓存动态网页》 中的方案中,浏览器发送If-Modified-Since将是否需要使用自己的缓存交给WEB服务器去决定,服务器告知浏览器去读缓存,浏览器才会去读缓存。这种机制存在的性能损耗...

Global site tag (gtag.js) - Google Analytics