如何在 EnableSessionState="False" 的请求中获取 SessionID

Posted

技术标签:

【中文标题】如何在 EnableSessionState="False" 的请求中获取 SessionID【英文标题】:How to get SessionID on a request where EnableSessionState="False" 【发布时间】:2010-11-25 14:06:43 【问题描述】:

我希望能够在 EnableSession = falseWebMethod 函数中获取当前经过身份验证的会话的 SessionID

我无法在此请求上设置 EnableSession=true,因为不同页面上的另一个(长时间运行)请求将 SessionState 锁定(EnableSessionState == "True"不是“只读”)。

是否有一致的方式从 ASP.NET 会话 cookieUrl 获取 SessionID 用于无 cookie 会话?我可以自己编写代码,但我更愿意使用已经记录和测试过的函数。

非常感谢, 弗洛林。

【问题讨论】:

【参考方案1】:

似乎没有 ASP.NET 函数可以做到这一点,所以我自己编写了一个 hack,它现在可以工作……;):

private string GetSessionID(HttpContext context)

  var cookieless = context.Request.Params["HTTP_ASPFILTERSESSIONID"];
  if (!string.IsNullOrEmpty(cookieless))
  
    int start = cookieless.LastIndexOf("(");
    int finish = cookieless.IndexOf(")");
    if (start != -1 && finish != -1)
      return cookieless.Substring(start + 1, finish - start - 1);
  
  var cookie = context.Request.Cookies["ASP.NET_SessionId"];
  if (cookie != null)
    return cookie.Value;
  return null;

【讨论】:

【参考方案2】:

HttpContext.Current.Session.SessionID

【讨论】:

Session 在这个请求中不可用,所以 HttpContext.Current.Session == null。

以上是关于如何在 EnableSessionState="False" 的请求中获取 SessionID的主要内容,如果未能解决你的问题,请参考以下文章

即使 EnableSessionState="ReadOnly" 也会设置 asp.net 变量

只有在配置文件或 Page 指令中将 enableSessionState 设置为 true 时,才能使用会话状态。还请确保在应用程序配置的 // 节中包括 System.Web.SessionSta

pages与页面配置

ASP .NET 检查会话

Q.js:如何在 Q.js 中重写异步系列流程?

Q.js:如何在 Q.js 中重写异步系列流程?