我有一个在启用了Windows集成身份验证的群集环境中运行的.Net应用程序。到目前为止,它一直运行良好,除了Session用于跟踪应用程序的“状态”。不幸的是,用户已经跨浏览器选项卡打开了多个应用程序实例。您可能知道,IE不会将制表符视为单独的实例。这导致跟踪问题。为了解决这个问题,我已将cookieless="UseUri"
指令添加到我的Web.config中,它似乎工作正常。问题是,在特定点,应用程序会重新提供身份验证凭据。我相信这与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指令 我还发现有关使用Ajax和无cookie指令的this问题可能会提供一些见解并让我相信自己可能走在正确的轨道上。 我在这里偏离轨道吗?有两种能力的解决方案吗?
更新: 关于Enabling POST in Cookieless ASP.NET Applications的精彩文章。
进一步更新:
我已经按照上面的链接尝试实现代码,但似乎ShouldRedirect()
检查中的值总是返回false,因此重定向永远不会发生。对于解决方案来说,这个描述听起来很棒,但是我无法使其正常工作。具体而言,填充“AspCookielessBoolSession”和“AspSessionIDManagerInitializeRequestCalled”的值(HttpContext.Current.Items.Count返回为2或3),具体取决于cookieless指令是否设置为“UseUri”或“true”。
此时我对任何解决方案都持开放态度,因为我需要在Windows 和标签中保持Session的唯一性。
答案 0 :(得分:0)
您可以使用System.Web.HttpContext.Current.Items["AspCookielessSession"]
检查是否存在已为该用户获取的会话