最近做了个系统,其中涉及到对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
分享到:
相关推荐
注意:如果不设置持久化时间,cookie会存储在浏览器的内存中,浏览器关闭 cookie信息销毁(会话级别的cookie),如果设置持久化时间,cookie信息会 被持久化到浏览器的磁盘文件里 示例: cookie.setMaxAge(10*60); ...
cookieUserName.setMaxAge(60); //Cookie保存时间 //创建用户密码Cookie对象 Cookie cookiePassword = new Cookie("password", password); cookiePassword.setMaxAge(60); //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 = new Cookie(“TOM”,”111″); //设置有效期,默认秒为单位 cookie. setMaxAge(7*24*60*60); //添加cookie到客户端 response.addCookie(cookie); 获取Cookie ...
jsp中设置cookie如果不设置路径,会出现cookie丢失问题 Cookie cookie = new Cookie(cookieName, value); cookie.setMaxAge(3600); cookie.setPath(/); response.addCookie(cookie); 以上这篇关于jsp中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&...
cookie.setMaxAge(24 * 60 * 60 *60); //把Cookie发送到客户端 response.addCookie(cookie); //得到客户端发送的Cookie Cookie [] cookies = request.getCookies(); for(int i=0; i; i++) { Cookie temp = cookies...
调用Cookie对象的setMaxAge()方法便可以设置Cookie对象的有效时间, 例如:Cookie c = newCookie("username","john"); c.setMaxAge(3600); (6)Cookie应用 Cookie对象的典型应用时用来统计网站的访问...
客户端选择不加入Session,例如,如果客户端拒绝接收来自服务器的cookie 作为一个Servlet的开发者,你必须决定你的Web应用是否处理客户机不加入或不能加入Session。服务器会在Web服务器或Servlet规定的时间内维持一...
在用户不需要记住密码时,调用setMaxAge方法将cookie的生命周期设置为0,即可销毁cookie 3. 由于使用thymeleaf暂时没找到操作cookie的方法,故此导入vue-cookie包,使用vue操作cookie 4. 在vue中,不能用$...
cookie1.setMaxAge(0); cookie2.setMaxAge(0); } //4.将会员卡带回家 response.addCookie(cookie1); response.addCookie(cookie2); //成功跳转到成功页面 //out.println("登录成功"); // /servlet/...
看J2EE的时候,看见书上讲到使用cookie保存信息的时,看到书上举得例子都是英文的键值对,我就想中文是不是一样呢?试了一下果然不一样。废话不多说,直接上代码: 比如说有addCookie.jsp代码如下: 代码如下:<...
public static void addCookie(String name, String value,int age, HttpServletResponse response) ... cookie.setMaxAge(age); cookie.setPath(path); response.addCookie(cookie); }
在上篇《ASP.NET性能优化之让浏览器缓存动态网页》 中的方案中,浏览器发送If-Modified-Since将是否需要使用自己的缓存交给WEB服务器去决定,服务器告知浏览器去读缓存,浏览器才会去读缓存。这种机制存在的性能损耗...