【问题标题】:Add ASP.NET_SessionId to jQuery post将 ASP.NET_SessionId 添加到 jQuery 帖子
【发布时间】:2018-05-11 19:22:51
【问题描述】:

我合并了一个 ASP.NET 和一个 HTML/jQuery 项目。 ASP.NET 项目使用会话 ID,但它没有出现在我的后台请求中。 我在浏览器 cookie 中看到“ASP.NET_SessionId”,但 JS 无法访问它。 连接到服务器时,如何告诉浏览器使用“ASP.NET_SessionId”? 可以通过 $.post() 函数设置吗?

【问题讨论】:

  • 你到底想用它做什么,你不应该把它暴露给 js,因为那样你很容易受到会话劫持
  • 我在后台通过 AJAX 发布和获取(特定于用户的)数据(登录用户的)。我在浏览器 URL 中看到会话 ID,但 AJAX 请求中缺少它。
  • 您在 Ajax 中是如何称呼的?网络服务? Http处理程序?网络表单?

标签: jquery asp.net ajax session-cookies


【解决方案1】:

您无法访问会话 cookie,因为它设置为仅 HTTP。

因此出于安全原因它对 JavaScript 是隐藏的。将其暴露给 JavaScript 将是一个巨大的安全漏洞。

Please Read this Blog

【讨论】:

  • 可能是我理解错了,但是我不想通过JS访问会话ID。我坚持认为 XHR 是由浏览器执行的。我只是想告诉浏览器使用浏览器存储的会话 ID。
  • 在 ASP.NET 或 MVC 中?
  • 我认为是 ASP.NET。用 VS2010 制作。
  • 会话 cookie 只是服务器用来将请求映射到特定会话对象的随机标识符。因此,它不打算从客户端读取,因此 cookie 设置了 HttpOnly 标志。这是一件好事,因为它可以防止恶意脚本劫持您的会话。即使您可以读取会话 cookie,它也只是一个无意义的 ID。存储在会话中的值将无法从您的脚本中获得。
  • @JánosiZoltánJános 在 .Net 中执行 ajax 时不需要传递 SessionId。服务器已经知道 ajax 调用来自谁。您甚至可以从服务器端访问该用户的会话(尽管访问会话会使 ajax 调用同步,除非会话被标记为只读,因此如果可以避免,则不建议这样做)。查看本教程关于 ajax 和 asp.net ajax.net-tutorials.com
【解决方案2】:

在我看来,我解决了我原来的问题。 我只是从 URL 中获取会话 ID,然后将其包含在帖子 URL 中。 我做了一个简单的辅助函数,可以清楚地看到所有内容:

getSessionIDFromURL = function() 
{
  var sPathName = window.location.pathname;
  var urlRegex = "/(\\(S\\([a-z0-9]+\\)\\))/";
  var sSessionID = sPathName.match(urlRegex);
  return sSessionID[1];
}

var sBaseURLWithSessionID = "/" + getSessionIDFromURL() + "/";

现在我的 XHR 请求适用于我的 ASP.NET 会话。

【讨论】:

    猜你喜欢
    • 2010-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多