【发布时间】:2013-09-11 15:03:10
【问题描述】:
在我的 Web 应用程序(在 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
这工作得很好。但是现在我遇到了问题,服务器有一个错误,因此在调用注销接口时它不会删除会话,会话无法关闭(并且我无权访问服务器)。为了正确注销,我必须删除客户端上的会话 cookie,以便从服务器获取一个新的。但我找不到访问或删除 cookie 的方法,document.cookie 变量在我的 web 应用程序中为空。我还尝试从localhost/myApp/my.module/ 和localhost/my.module/ 中读取document.cookie 变量,但它始终为空。我尝试的另一件事是用
document.cookie = "JSESSIONID=ABC; Path=/my.module";
但服务器请求仍然具有之前的 cookie。谁能告诉我如何删除它?
我知道这个解决方案会是一个 hack,但这正是我正在寻找的,因为服务器程序员无法及时修复错误并要求我在客户端实现这样的 hack。
【问题讨论】:
-
这可能是一个仅限 HTTP 的 cookie!我认为你必须在服务器端删除它
-
cookie 将设置在服务器端。如果你不能删除它,你可以使你的会话无效吗?
-
服务器响应头中没有
HttpOnly标志。 -
@Salketer - 运行 js 的应用程序可以是另一个应用程序的一部分,该应用程序使用另一个应用程序提供的服务(在这种情况下是服务器)。
-
@user1448982 您应该联系可以更改服务器应用程序的人员。任何其他实现都将是解决该问题的 hacky 解决方案。
标签: javascript ajax cookies