`
rentianchou
  • 浏览: 68351 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

关于项目中不能删除cookie的问题

阅读更多
在A项目中登陆后才能访问B项目,所以在项目中使用了cookie,cookie保存了用户的加密信息。而就在注销的时候我却遇到了问题,问题是当我注销后我存入的cookie却依旧存在。我于是怀疑我代码段出现了问题,代码如下:

删除cookie调用的方法(这里用的是spring的MVC)
/**
	 * 用户注销
	 */
	@RequestMapping("/exitUser.htm")
	public void exitUser(HttpServletRequest request,
			HttpServletResponse response,SessionStatus status) {
				
				CookieUtil.delCookie(request, response, WebConstant.COOKIE_DAMAIN_NAME);
						status.setComplete();
		
		HttpSession session = request.getSession(false);
		if(session!=null){
			session.removeAttribute("user");
			session.removeAttribute("userSites");
			session.invalidate();
		}
	}

cookieutil类的删除方法如下:
public static void delCookie(HttpServletRequest request,HttpServletResponse response,String key){
		
		Cookie cookie = new Cookie(key, null);
		cookie.setMaxAge(WebConstant.Cookie_MIN_AGE);//最小值为0,已设为常量
		cookie.setPath("/");
		cookie.setDomain(WebConstant.DOMAIN);//WebConstant.DOMAIN已设为常量
		response.addCookie(cookie);
		
	}

而且打断点也执行了该方法,但是我怎么看也看不出问题。那么我想是不是cookie.setMaxAge这个方法无效了呢?于是我又打断点查找该cookie,通过断点,我看到cookie的MaxAGE属性是-1,无论如何怎样赋值都得到的是-1。为什么始终是-1呢,明明是赋值了的呀,后来承蒙一位高人的指点详见http://xiaolongfeixiang.iteye.com/blog/656454知道服务器端是得不到cookie的生存时间的。
那应该是什么问题导致没有删除呢?于是我又做了个单独的例子,发现调用同样的方法是可以删除的啊!
实在找不出答案了,我又看了下jsp,代码如下:
<a href="#" onclick="logout();" ><span>退出</span></a>

<iframe style="display:none" name="logout_frame"></iframe>
  <iframe style="display:none" name="logout_frame_group"></iframe>
 <form action="${ctx }/exitUser.htm" name= "userLogout"
target="logout_frame" method="GET">
</form>
 <form action="${ctx_group }/groupCancel.do" name = "groupLogout"
target="logout_frame_group" method="GET">
</form>
<script type = "text/javascript">
function logout(){
	try{
	document.groupLogout.submit();
  	document.userLogout.submit();
  	}catch(err){}
  window.location.href="http://www.jobqun.com/jsp/login.jsp";
}<!-- 因为两个web应用的session都必须清空,所以2次提交 -->

</script>

当我把红色部分注释掉后,发现cookie终于成功删除了,至于为什么我也真的没有想通,我想会不会是提交太快了,导致浏览器中断了前天的方法而执行后面的方法。与是又把代码改成了这样
function logout(){
	try{
	document.groupLogout.submit();
  	document.userLogout.submit();
  	}catch(err){}
  	setTimeout("window.location.href=http://www.jobqun.com/jsp/login.jsp",200);
  	}

cookie成功删除。
分享到:
评论
1 楼 xiaolongfeixiang 2010-05-11  
呵呵,能够自我分析、调试、解决问题。很不错,继续努力!!

相关推荐

Global site tag (gtag.js) - Google Analytics