2012-04-19 73 views
1

我想要创建一个JSP来删除适用于当前页面的所有Cookie(因此,如果重置页面驻留在网站www.dev.example.com上,它将获得所有Cookie:www.dev.example.com.dev.example.com,。example.com)和服务器端,将它们全部删除。使用JSP清除所有设置的Cookie

这是什么代码?

回答

0

参考RFC 2109,你只需要使用您的HTTP响应的Set-Cookie头,并设置要被清除到一个空白value.Such作为

Set-Cookie: ssid= 

更新饼干: 我我不熟悉JSP,所以我使用PHP和Javascript为例,假设您的Cookie中没有HttpOnly属性。

我用这个PHP代码来设置cookie的,你可以上传PHP脚本到Web服务器,www.yourserver.com/setcookie.php

<?php 
setcookie('name', 'li'); 
?> 

我使用this HTML文件清除Cookie再次,如果你不想删除比其他替代这个HTML文件上传到您的Web服务器,www.yourserver.com/clearcookie.html

<script> 
function deleteAllCookies() { 
    var cookies = document.cookie.split(";"); 

    for (var i = 0; i < cookies.length; i++) { 
     var cookie = cookies[i]; 
     var eqPos = cookie.indexOf("="); 
     var name = eqPos > -1 ? cookie.substr(0, eqPos) : cookie; 
     document.cookie = name + "=;expires=Thu, 01 Jan 1970 00:00:00 GMT"; 
    } 
} 

deleteAllCookies(); 
</script> 
+0

对,所以我需要先读取所有当前设置的cookie,然后为每个使用Set-Cookie标头。我是否也需要为每个域设置一个域?那么这个功能是什么样的?有没有这样做,作为一个库 - 迭代当前的cookie并取消设置? – artlung 2012-04-19 01:28:20

0

是将它们存储为持续性的cookie

set MaxAge = -1 

MaxAge of -1表示您希望Cookie在会话期间持续存在。您想要将MaxAge设置为0。

A negative value means that the cookie is not stored persistently and 
will be deleted when the Web browser exits. A zero value causes the cookie 
to be deleted. 

另一个是

Iterate all cookies in servlet/Scriptlet and set all Cookies Value NULL . 

还一个是

use javascript code to remove all cookies. 
+0

那么实际的JSP代码会做什么呢? – artlung 2012-04-19 17:24:05

0

使用下面的代码。

<body> 

<% 

    if(request.getParameter("removeCookie") != null){   
     for(Cookie cookie : request.getCookies()){ 

      if(!cookie.getName().equals("JSESSIONID")){ 
       cookie.setMaxAge(0); 
       cookie.setValue(""); 
       cookie.setPath("/"); 

       response.addCookie(cookie); 
      } 
     } 
    } 

%> 
<form action="#" method="get"> 

<input type="submit" id="removeCookie" name="removeCookie" value="Remove cookie" > 
</form> 


</body> 
+1

正如你在你的其他答案中回答自己(为什么你发布另一个答案,而不是编辑最初的答案?),最大年龄-1是错误的。 – BalusC 2012-04-20 13:39:40

+0

,因为这是另一个答案,有问题,他问这样做 和在评论中,他问的代码,所以... – 2012-04-20 17:32:28