【问题标题】:Asp.net ajax - losing session variables - Internet Explorer 8 and prior versionsAsp.net ajax - 丢失会话变量 - Internet Explorer 8 和早期版本
【发布时间】:2012-08-17 05:36:36
【问题描述】:

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

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

我已经检查了 Fiddle 的 cookie 问题,但它们总是以相同的方式发送。

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

我们还使用旧版 Ajax 库。问题不应该存在于我们的许多应用程序中 使用它,他们没有同样的问题。

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

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

【问题讨论】:

标签: c# asp.net ajax


【解决方案1】:

我明白了!

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

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

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

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

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

【讨论】:

    【解决方案2】:

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

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

        public string MyProperty
        {
            get
            {
                return ViewState["MyProperty"] as string;
            }
            set
            {
                ViewState["MyProperty"] = value;
            }
        }
    

    【讨论】:

    • 我担心由于会话数据是在某些库中设置和检索的,因此我不会始终访问此属性。而且,Ajax 库被实现为访问简单类的方法(它们不扩展 Page 或 Control)。
    • 您可以从 javascript 调用服务器端函数。在这个函数内部,访问会话不会有问题(如果问题出在遗留 Ajax 库而不是实际应用程序中)。您可以像这样在静态方法中访问会话:System.Web.HttpContext.Current.Session
    • Eric 如果您需要更多信息和示例代码,请告诉我如何使 javascript 调用服务器方法。如果需要,我会发给你。
    • Gregor,应用程序在 ajax 方法和一些库中执行此操作。我的意思是,System.Web.HttpContext.Current.Session 总是在 ajax 方法中使用。问题是它在 IE8 和旧版本中不起作用。当我们使用 Chrome、FireFox 甚至 IE9 时,会话数据始终存在。而且 Page.ViewState 还不够,因为会话丢失会导致用户关闭。
    猜你喜欢
    • 1970-01-01
    • 2010-11-02
    • 2012-08-26
    • 1970-01-01
    • 2015-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-03
    相关资源
    最近更新 更多