2

我有一个在启用了 Windows 集成身份验证的集群环境中运行的 .Net 应用程序。到目前为止,它一直运行良好,除了 Session 用于跟踪应用程序的“状态”这一事实。不幸的是,用户一直在跨浏览器选项卡打开应用程序的多个实例。您可能知道,IE 不会将选项卡视为单独的实例。这导致跟踪出现问题。为了解决这个问题,我已将cookieless="UseUri"指令添加到我的 Web.config 中,它似乎工作正常。问题在于,在特定点,应用程序会再次提示输入身份验证凭据。我相信这类似于双跳认证问题,但我无法确定为什么将 Session 作为 URI 的一部分进行跟踪会导致此行为。幕后发生了什么,我该如何覆盖/防止这种行为?
我想如果有更好的方法来简单地将浏览器选项卡之间的会话分开,我也会为此做好准备。

编辑:作为后续行动,我意识到该问题与从客户端脚本(例如mainScreen.ServerMethod("cv0_value", "1");)对 WebMethod 的特定调用有关

    [System.Web.Services.WebMethod]
    public static string ServerMethod(string name, string value)
    {
        HttpContext.Current.Session[name] = value;
    }

我不确定客户端和服务器如何同步会话值,但问题似乎相对直观,因为当我使用 URI 进行会话跟踪时,我试图设置服务器端会话值。我可能还差得很远,但我不确定使用 Web.config 指令是否可行。
我还在 SO 上发现了这个与使用 Ajax 和 cookieless 指令相关的问题,这可能会提供一些见解并让我相信我可能走在正确的轨道上。我在这里偏离轨道了吗?有没有办法同时拥有这两种能力?

更新:关于在 Cookieless ASP.NET 应用程序中启用 POST 的漂亮文章。

进一步更新:我已经按照上面的链接并尝试实现代码,但似乎检查中的值ShouldRedirect()总是返回 false,因此重定向永远不会发生。该描述听起来很适合该解决方案,但我无法使其正常工作。具体来说,“AspCookielessBoolSession”和“AspSessionIDManagerInitializeRequestCalled”的值会根据 cookieless 指令设置为“UseUri”还是“true”来填充(HttpContext.Current.Items.Count 返回 2 或 3)。

在这一点上,我对任何解决方案都持开放态度,因为我需要在窗口选项卡中保持 Session 的唯一性。

4

1 回答 1

0

您可以System.Web.HttpContext.Current.Items["AspCookielessSession"]用来检查是否已经为用户获取了会话

于 2013-05-30T07:33:28.837 回答