我的服务器端代码:

    [WebMethod(CacheDuration = 0, EnableSession = true)]
    public static int UserID()
    {
        if (HttpContext.Current.Session["UserID"] == null) return 0;
        int UserID = Convert.ToInt32(HttpContext.Current.Session["UserID"]);
        return (UserID);

    }

我的客户端代码:

$.ajax({
    type: "POST", cache: false,
    url: "Login.aspx/UserID",
    data: "{'r':" + rnd() + "}",
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: function(msg) {
        alert(msg);
    }
});

此代码在我的localhost上运行良好。 和“UserID” ajax调用,返回Session参数的正确值。

但是当我尝试在服务器上上传我的网站时,“UserID” ajax调用总是返回false !!

我的服务器是asp.net 2.0,我正在使用jquery 1.3.2

所以请帮助解决这个问题。

有帮助吗?

解决方案

阅读本文: ASP.NET会话状态常见问题解答 我在这个问题中找到了答案:

  1. 问:会话状态适用于某些Web服务器,但不适用于其他Web服务器。 答:也许机器名称问题。请参阅 http://support.microsoft.com/default.aspx ?scid = kb; EN-US; q316112
  2. 问:使用InProc模式时,为什么会话变量经常丢失? 答:可能是因为应用程序回收。请参阅 http://support.microsoft.com/default.aspx ?scid = kb; en-us; Q316148
  3. 将sessionState模式更改为“StateServer”解决了这个问题。 使用以下代码:

    <sessionState mode="StateServer"
      stateConnectionString="tcpip=localhost:42424"
      cookieless="false"
      timeout="999"/>
    

其他提示

要检查的一些事项:

您使用的是WebFarm配置吗?在WebFarm配置中使用会话时可能会出现问题。

您是否使用Fiddler或FireBug等工具检查网络流量?在AJAX调用期间是否发送了ASP.NET Auth cookie?

您能否确认会话var有效?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top