Javascript:删除由ajax响应设置的cookie

时间:2013-09-11 06:37:34

标签: javascript ajax cookies

在我的Webapp(运行在localhost/myApp/)中,我有一个类似的ajax调用:

$.ajax({
    type: "GET",
    url: "http://localhost:8080/my.module/Login/login?user=abc&password=123",
    xhrFields: {
        withCredentials: true,
    },
    success: onResult,
    error: onError,
});

登录服务器。如果登录成功并且响应也包含此标头,则服务器以布尔值响应:

Set-Cookie: JSESSIONID=167C57FA1E3529433938E744F7C4AC52; Path=/my.module

使用先前设置的xhrField“withCredentials:true”,浏览器会自动处理cookie并在以下所有请求中附加Cookie标头:

Cookie: JSESSIONID=167C57FA1E3529433938E744F7C4AC52

这完全没问题。但是现在我遇到了问题,服务器有一个bug,因此在调用注销界面时不会删除会话,会话无法关闭(我无法访问服务器)。为了正确注销,我必须删除客户端上的会话cookie,这样我才能从服务器上获取一个新的会话cookie。但我无法找到访问或删除cookie的方法,document.cookie变量在我的webapp中为空。我还尝试阅读document.cookielocalhost/myApp/my.module/中的localhost/my.module/变量,但它始终为空。我尝试的另一件事是用

覆盖cookie
document.cookie = "JSESSIONID=ABC; Path=/my.module";

但服务器请求仍然具有之前的cookie。谁能告诉我如何删除它?

我知道这个解决方案会是一个黑客,但这就是我正在寻找的,因为服务器程序员无法及时修复bug并要求我在客户端实现这样的黑客攻击。

1 个答案:

答案 0 :(得分:1)

“无法通过非HTTP方法访问HttpOnly cookie,例如通过JavaScript调用” - http://en.wikipedia.org/wiki/HTTP_cookie#Secure_and_HttpOnly

首先,客户端javascript不应该关心cookie 当服务器看到登录请求时,它会创建一个新的cookie并调用Set-Cookie 收到任何其他ajax请求后,服务器会在提供请求之前验证当前cookie 在注销请求时,它将从其(服务器的)会话信息中清除cookie,即来自具有相同cookie的客户端的任何进一步请求将失败,因为它不在服务器存储中。