使用来自 JavaScript 的每个请求向服务器端发送信息

Posted

技术标签:

【中文标题】使用来自 JavaScript 的每个请求向服务器端发送信息【英文标题】:Sending info to server side with every request from JavaScript 【发布时间】:2020-08-13 02:49:35 【问题描述】:

我想从我的 javascript 应用程序(可以是 vanilla JS、JQuery 或任何基于 SPA 的框架)向服务器端发送一些信息以及每个 AJAX 请求。我们正在使用 JQuery 进行 AJAX 调用。 我不想使用 QueryString 或 Headers 向服务器发送信息。我想对用户保持这些信息的抽象。我在考虑 cookie,但使用 JavaScript 在客户端创建的 cookie 在服务器端不可用。我还想在浏览器关闭后销毁此信息(这意味着此信息是特定于会话的)。

在服务器端,我们使用 ASP.NET WPI (C#)

实现这一点的方法是什么?

【问题讨论】:

你在后端使用什么......也在客户端中,你在使用 fetch 吗?如果是这样,可以将 cookie 发送到服务器 developers.google.com/web/updates/2015/03/… ...如果使用 axios,cookie 会在没有其他设置的情况下发送到服务器...对于 nodejs 服务器,您可以在后端使用 cookie-parser 之类的东西... @gdh 在服务器端,我们使用ASP.NET WPI (C#)。我们没有使用fetch。所有的 AJAX 调用都是使用 Jquery 进行的。 也许您的 cookie 关联了错误的域?尝试通过***.com/questions/1458724/… 【参考方案1】:

您可以使用js-cookie 之类的库来设置cookie(或者在纯JS 中使用document.cookie)。没有 max-age 或过期日期的 cookie 将是一个会话 cookie,并且会在用户关闭浏览器选项卡时过期。

如果 api 和 web 应用在同一个域中,所有 cookie 都会自动发送到后端。例如,如果您的应用在 https://www.yourdomain.com 上,而您的 api 在 https://api.yourdomain.com 上,这将是一个跨域请求,并且必须在 jQuery 中手动启用发送 cookie,使用 withCredentials: true

$.ajax(
   url: a_cross_domain_url,
   xhrFields: 
      withCredentials: true
   
);

请参阅jQuery AJAX 的文档。

(同样适用于其他 AJAX 库,如 axios

我不是 C# 方面的专家,但这里有一个 link to the docs,其中有一个关于如何检索请求 cookie 的示例。

【讨论】:

以上是关于使用来自 JavaScript 的每个请求向服务器端发送信息的主要内容,如果未能解决你的问题,请参考以下文章

来自 Siebel 的 SOAP 请求在每个元素中都有命名空间

android - 来自 Foursquare 的 JSON 请求后的空正文

验证来自 Javascript 的跨域请求

如何使用客户端Javascript向Ldap发出请求?

Websocket阻止来自服务器的传入请求

使用 OAuth2 下载 Javascript 文件