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

时间:2009-09-04 10:10:45

标签: asp.net session-state webmethod sessionid

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

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

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

非常感谢,
林。

2 个答案:

答案 0 :(得分:5)

似乎没有可以做到这一点的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;
}

答案 1 :(得分:-1)

HttpContext.Current.Session.SessionID