会话状态不会因调用页面方法而保留

时间:2009-07-31 00:48:03

标签: asp.net jquery asmx pagemethods

我的服务器端代码:

    [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

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

2 个答案:

答案 0 :(得分:1)

阅读本文:ASP.NET Session State FAQ 我在这个问题中找到了答案:

  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"/>
    

答案 1 :(得分:0)

要检查的一些事项:

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

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

您能否确认会话var有效?