【问题标题】:Session configured as cookieless causing extra authentication prompt?会话配置为无 cookie 导致额外的身份验证提示?
【发布时间】:2013-05-30 15:33:28
【问题描述】:

我有一个在启用了 Windows 集成身份验证的集群环境中运行的 .Net 应用程序。到目前为止,它一直运行良好,除了 Session 用于跟踪应用程序的“状态”这一事实。不幸的是,用户一直在跨浏览器选项卡打开应用程序的多个实例。您可能知道,IE 不会将选项卡视为一个单独的实例。这导致跟踪出现问题。为了解决这个问题,我在我的 Web.config 中添加了 cookieless="UseUri" 指令,它似乎工作正常。问题在于,在特定点应用程序会再次提示输入身份验证凭据。我相信这类似于double hop authentication 问题,但我无法确定为什么将 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 指令是否可行。
我还发现了this 与使用 Ajax 和 cookieless 指令相关的 SO 问题,这可能会提供一些见解并让我相信我可能走在正确的轨道上。 我在这里偏离轨道了吗?有没有办法同时拥有这两种能力?

更新: Enabling POST in Cookieless ASP.NET Applications上的漂亮文章。

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

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

【问题讨论】:

    标签: .net session authentication


    【解决方案1】:

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

    【讨论】:

    • 感谢您的回复。自从我看过这个以来已经有一段时间了,所以我不得不绕着圈子试试你的建议。有机会我会回复你的。谢谢。
    猜你喜欢
    • 2019-10-28
    • 1970-01-01
    • 1970-01-01
    • 2015-03-25
    • 1970-01-01
    • 1970-01-01
    • 2014-07-09
    • 1970-01-01
    • 2010-10-02
    相关资源
    最近更新 更多