1

我一直在处理一个遗留项目(尽管是 C#),并试图解决一个多年来一直存在的会话问题。它发生在 IE8 和以前的版本上。在 IE9 上,Google Chrome、Firefox 和 Safari 运行良好。

换句话说,我们有一个可以在所有浏览器上正常运行的管理软件。但是有一个特定的页面会发出大量的 Ajax 请求,并且在某些时候它会丢失会话数据。

我已经检查了 Fiddle 的 cookie 问题,但它们总是被发送并且相同。

这些线索让我们认为问题出在应用程序内部。但如果我们记得问题仅出现在 IE8 和之前的版本中,我们认为问题可能出在浏览器中。

我们还使用一个遗留的 Ajax 库。而且问题一定不存在,因为我们的许多应用程序都使用它,并且它们没有相同的问题。

  • 我们正在使用带有状态服务器的 IIS7

我几乎没有想法。我希望你有一些。

4

2 回答 2

0

我知道了!

使用 Fiddler,我看到一个非常可疑的“/”请求。有东西请求站点基本 URL。我记得这个特定 Web 应用程序的默认页面会杀死会话数据,换句话说,调用登录页面也意味着注销用户。

经过几个小时的调试和嗅探,我发现了发出这样的请求的原因。

有一个 javascript 函数可以创建一些图像标签。有时这些标签是用一个空地址创建的,换句话说,img 标签的 src 属性是一个长度为 0 的字符串。

它必须是IE8 和旧版本的错误,因为它们请求网站根目录而不是不请求任何内容。也许这不是一个错误,但这种行为肯定是出乎意料的。

呸!我仍然不敢相信我找到了它。

于 2012-08-23T00:00:38.393 回答
0

丢失会话状态可能是应用程序错误的结果。但是,如果您声称这仅发生在 IE8 和旧版本上,则情况并非如此……所以我建议您使用页面 ViewState 而不是会话状态。让我知道是否对你有用?

以下是如何根据页面视图状态创建属性的示例,只需确保您已在页面级别启用视图状态:

    public string MyProperty
    {
        get
        {
            return ViewState["MyProperty"] as string;
        }
        set
        {
            ViewState["MyProperty"] = value;
        }
    }
于 2012-08-21T20:27:22.157 回答