gpt4 book ai didi

javascript - Fetch API 调用导致新的 Asp.net session

转载 作者:行者123 更新时间:2023-11-30 20:16:02 25 4
gpt4 key购买 nike

我正在删除我的一个 asp.net mvc 项目中的 jQuery,转而使用直接的 vanilla JS。现在我已经用 Fetch API 调用替换了 $.ajax POST 调用,每个调用都会在服务器上触发一个新 session 。

在过去的几天里,这一直困扰着我,我已经将其缩小到具体的从使用 jQuery Ajax 到 Fetch API 的转换。我的新 Fetch API 调用在其他情况下工作得很好,仍然执行所需的服务器端工作。一旦他们返回,就会触发一个新的服务器 session 。

显然,这是一个主要问题,因为我的用户 session 数据不断被重置。关于为什么会发生这种情况的任何想法?或者有人知道任何解决方法,而不必恢复使用 jQuery 吗?

我之前基于“jQuery”的 POST 调用:

Post(route, data) {
$.ajax({
type: 'POST',
url: route,
data: JSON.stringify(data),
contentType: "application/json; charset=utf-8"
}).done((result, statusText, jqXHR) => {
return result;
});
}

我新的基于“Fetch API”的调用:

async Post(route, data) {
let response = await fetch(route, {
method: 'POST',
headers: {
'Accept': 'application/json',
'Content-type': 'application/json'
},
body: JSON.stringify(data)
});
let result = await response.json();
return result;
}

在我的 Global.asax.cs 中:

protected void Session_Start(object o, EventArgs e) {
Debug.WriteLine("Session_Start");
HttpContext.Current.Session.Add("__MySessionData", new MySessionDataClass());
}

正如我上面提到的,除了重置我的 session 之外,Fetch API 调用工作得很好,我从 Debug.WriteLine 调用中知道这一点。 jQuery Ajax 调用也可以正常工作,并且不会触发新 session ,但我正试图消除对 jQuery 的依赖。

想法?

最佳答案

您没有在自定义请求中传递 ASP.NET_SessionId cookie。

您正在使用 fetch . By default它使用 omit 作为 credentials。这意味着,正如 MDN 页面上所说:

By default, fetch won't send or receive any cookies from the server, resulting in unauthenticated requests if the site relies on maintaining a user session (to send cookies, the credentials init option must be set).

JQuery 确实发送 cookie,但只发送同一域中的 cookie。

AJAX calls only send Cookies if the url you're calling is on the same domain as your calling script.
Source

要解决此问题,您需要告诉 fetch 发送 cookie。来自 this post :

fetch('/something', { credentials: 'same-origin' }) // or 'include'

关于javascript - Fetch API 调用导致新的 Asp.net session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51291831/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com