`

关于设置了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
分享到:
评论

相关推荐

    关于java应用cookie

    有效期为0表示Cookie仅在当前会话期间有效,浏览器关闭后就会删除;若为负数则表示Cookie将一直保存在客户端,直到被手动删除或过期。 ##### 2. 添加Cookie到响应中 创建了Cookie之后,需要将其添加到HTTP响应中,...

    java中cookie的使用教程

    要删除Cookie,只需创建一个与要删除的Cookie具有相同名称的新Cookie,并将其最大存活时间设置为0: ```java Cookie cookieToRemove = new Cookie("name", ""); cookieToRemove.setMaxAge(0); response.add...

    jsp中cookie操作

    #### 五、注意事项 - **同目录下操作**:为了确保Cookie的正确读取和写入,写入和读取Cookie的JSP页面应该位于同一个目录下。 - **检查Cookie是否为空**:在处理Cookie时,应该先检查是否存在有效的Cookie,避免...

    Cookie的应用例子

    四、Cookie的限制与注意事项 - 每个域下的Cookie数量有限制,通常不超过20个。 - 单个Cookie的大小不能超过4KB,以防内存溢出。 - 安全性问题:由于Cookie存储在客户端,敏感信息不应直接存入,应加密处理。 - 隐私...

    java和js中cookie的相关操作.docx

    - 设置过期时间:`cookie.setMaxAge(0);` 使 Cookie 立即失效。 - 设置路径:`cookie.setPath("/test/test2");` 删除指定路径上的 Cookie。 - 添加到响应:`response.addCookie(cookie);` 进行删除操作。 4. **...

    javacookie的使用

    如果设置为负数,则表示这是一个会话Cookie,即在浏览器关闭后删除。 2. **setPath**: 设置Cookie的路径。通常设置为"/",表示在整个应用范围内有效。 3. **setDomain**: 设置Cookie的有效域名。例如设置为".example...

    servlet读取cookie代码

    如果设置为0,则立即删除Cookie。 #### 四、注意事项 - 在实际应用中,需要考虑安全性问题,比如对敏感信息进行加密处理。 - 对于跨域问题,可以通过设置Cookie的`domain`属性来解决。 - 注意Cookie的数量限制,每...

    cookie,jsp详细介绍

    设置有效期为0可以立即删除Cookie。 ##### 2\. `setPath` `setPath`方法用于指定Cookie适用的路径。默认情况下,Cookie仅适用于设置它的目录及其子目录。可以通过设置路径来控制Cookie的可用范围。 - **注意事项*...

    练习2:使用Cookie简化用户登录.zip

    六、实践中的注意事项 1. 设置合适的Cookie过期时间,防止长期占用用户磁盘空间。 2. 使用HTTPOnly标志,防止JavaScript脚本访问Cookie,减少XSS攻击的风险。 3. 使用Secure标志,确保Cookie只在HTTPS连接中发送,...

    使用Cookie进行会话管理.docx

    使用`setMaxAge`方法并指定秒数可以让Cookie持久化,值为0则删除Cookie。 在实际应用中,开发者需要根据业务需求选择合适的会话管理策略。对于敏感信息,通常使用Session来存储,因为它们不在客户端明文保存。而...

    jsp的Cookie讲解与例子

    **Cookie的注意事项:** 1. **大小限制**:每个Cookie的大小不能超过4KB,且浏览器一般限制每个站点最多可存储20个Cookie。 2. **安全性和隐私**:Cookie可能包含敏感信息,因此应加密存储并谨慎使用。 3. **跨域...

    jsp之Cookie自动登录

    安全注意事项 - Cookie不应存储敏感信息,如密码,应仅存储可以用来检索用户信息的标识符。 - 设置合适的Cookie有效期,过期后自动登出,增加安全性。 - 使用HTTPS协议加密传输Cookie,防止中间人攻击。 - 对...

    Java应用技巧

    #### 五、关于Cookie路径的注意事项 Cookie的路径是十分重要的,它决定了Cookie的可用范围。 - **路径匹配规则**: - 不同路径下可以存在相同的Cookie键名。 - 删除时,如果当前路径下没有键为"key"的Cookie,则...

    java对cookie的操作

    如果将`setMaxAge`设置为负数,则表示这是一个会话Cookie,即在浏览器关闭后会被删除。 为了限制Cookie的路径范围,可以通过`setPath()`方法来指定Cookie应该被发送到哪些路径: ```java Cookie cookie = new ...

    cookie_demo2.zip

    默认情况下,如果未设置过期时间,Cookie将被视为“会话Cookie”,在用户关闭浏览器时消失。若设置了过期时间,Cookie将在指定的日期和时间后失效。开发者可以通过`setMaxAge()`(Java Servlet)或`expires`属性...

    JAVA中cookie用法

    #### 四、注意事项 - **唯一性**: 在同一个应用中,Cookie的名字必须是唯一的。如果有两个名字相同的Cookie,后者会覆盖前者。 - **安全性**: 当使用`setSecure(true)`时,确保你的应用正在通过HTTPS协议运行,否则...

    java cookie 读写,记住密码 自动登录

    在Java Web开发中,Cookie是客户端存储数据的一种方式,它用于在用户浏览器和服务器之间传递信息,实现会话管理、个性化设置等功能。本主题将详细讲解如何使用Java进行Cookie的读写操作,以及如何利用Cookie实现记住...

    如何在SpringBoot中使用Cookies程序员节日快乐甜点送上.pdf

    本文详细介绍了如何在Spring Boot中实现这一功能,同时也提醒开发者关于安全性的注意事项。 首先,我们来看如何**读取HTTP Cookie**。Spring框架提供了`@CookieValue`注解,它可以直接应用于控制器方法的参数中,...

    JSP使用cookie自动登录

    6. **安全注意事项**: - 不要在Cookie中直接存储明文密码,而是使用不可逆的加密算法(如哈希)处理。 - 设置合适的Cookie过期时间,防止用户长时间离开后仍保持登录状态。 - 使用HTTPS协议以加密通信,防止中间...

Global site tag (gtag.js) - Google Analytics