最近做了个系统,其中涉及到对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
分享到:
相关推荐
有效期为0表示Cookie仅在当前会话期间有效,浏览器关闭后就会删除;若为负数则表示Cookie将一直保存在客户端,直到被手动删除或过期。 ##### 2. 添加Cookie到响应中 创建了Cookie之后,需要将其添加到HTTP响应中,...
要删除Cookie,只需创建一个与要删除的Cookie具有相同名称的新Cookie,并将其最大存活时间设置为0: ```java Cookie cookieToRemove = new Cookie("name", ""); cookieToRemove.setMaxAge(0); response.add...
#### 五、注意事项 - **同目录下操作**:为了确保Cookie的正确读取和写入,写入和读取Cookie的JSP页面应该位于同一个目录下。 - **检查Cookie是否为空**:在处理Cookie时,应该先检查是否存在有效的Cookie,避免...
四、Cookie的限制与注意事项 - 每个域下的Cookie数量有限制,通常不超过20个。 - 单个Cookie的大小不能超过4KB,以防内存溢出。 - 安全性问题:由于Cookie存储在客户端,敏感信息不应直接存入,应加密处理。 - 隐私...
- 设置过期时间:`cookie.setMaxAge(0);` 使 Cookie 立即失效。 - 设置路径:`cookie.setPath("/test/test2");` 删除指定路径上的 Cookie。 - 添加到响应:`response.addCookie(cookie);` 进行删除操作。 4. **...
如果设置为负数,则表示这是一个会话Cookie,即在浏览器关闭后删除。 2. **setPath**: 设置Cookie的路径。通常设置为"/",表示在整个应用范围内有效。 3. **setDomain**: 设置Cookie的有效域名。例如设置为".example...
如果设置为0,则立即删除Cookie。 #### 四、注意事项 - 在实际应用中,需要考虑安全性问题,比如对敏感信息进行加密处理。 - 对于跨域问题,可以通过设置Cookie的`domain`属性来解决。 - 注意Cookie的数量限制,每...
设置有效期为0可以立即删除Cookie。 ##### 2\. `setPath` `setPath`方法用于指定Cookie适用的路径。默认情况下,Cookie仅适用于设置它的目录及其子目录。可以通过设置路径来控制Cookie的可用范围。 - **注意事项*...
六、实践中的注意事项 1. 设置合适的Cookie过期时间,防止长期占用用户磁盘空间。 2. 使用HTTPOnly标志,防止JavaScript脚本访问Cookie,减少XSS攻击的风险。 3. 使用Secure标志,确保Cookie只在HTTPS连接中发送,...
使用`setMaxAge`方法并指定秒数可以让Cookie持久化,值为0则删除Cookie。 在实际应用中,开发者需要根据业务需求选择合适的会话管理策略。对于敏感信息,通常使用Session来存储,因为它们不在客户端明文保存。而...
**Cookie的注意事项:** 1. **大小限制**:每个Cookie的大小不能超过4KB,且浏览器一般限制每个站点最多可存储20个Cookie。 2. **安全性和隐私**:Cookie可能包含敏感信息,因此应加密存储并谨慎使用。 3. **跨域...
安全注意事项 - Cookie不应存储敏感信息,如密码,应仅存储可以用来检索用户信息的标识符。 - 设置合适的Cookie有效期,过期后自动登出,增加安全性。 - 使用HTTPS协议加密传输Cookie,防止中间人攻击。 - 对...
#### 五、关于Cookie路径的注意事项 Cookie的路径是十分重要的,它决定了Cookie的可用范围。 - **路径匹配规则**: - 不同路径下可以存在相同的Cookie键名。 - 删除时,如果当前路径下没有键为"key"的Cookie,则...
如果将`setMaxAge`设置为负数,则表示这是一个会话Cookie,即在浏览器关闭后会被删除。 为了限制Cookie的路径范围,可以通过`setPath()`方法来指定Cookie应该被发送到哪些路径: ```java Cookie cookie = new ...
默认情况下,如果未设置过期时间,Cookie将被视为“会话Cookie”,在用户关闭浏览器时消失。若设置了过期时间,Cookie将在指定的日期和时间后失效。开发者可以通过`setMaxAge()`(Java Servlet)或`expires`属性...
#### 四、注意事项 - **唯一性**: 在同一个应用中,Cookie的名字必须是唯一的。如果有两个名字相同的Cookie,后者会覆盖前者。 - **安全性**: 当使用`setSecure(true)`时,确保你的应用正在通过HTTPS协议运行,否则...
在Java Web开发中,Cookie是客户端存储数据的一种方式,它用于在用户浏览器和服务器之间传递信息,实现会话管理、个性化设置等功能。本主题将详细讲解如何使用Java进行Cookie的读写操作,以及如何利用Cookie实现记住...
本文详细介绍了如何在Spring Boot中实现这一功能,同时也提醒开发者关于安全性的注意事项。 首先,我们来看如何**读取HTTP Cookie**。Spring框架提供了`@CookieValue`注解,它可以直接应用于控制器方法的参数中,...
6. **安全注意事项**: - 不要在Cookie中直接存储明文密码,而是使用不可逆的加密算法(如哈希)处理。 - 设置合适的Cookie过期时间,防止用户长时间离开后仍保持登录状态。 - 使用HTTPS协议以加密通信,防止中间...