gpt4 book ai didi

c# - IE10 和 Windows 8 以及 ASP.NET MVC (IIS 7)

转载 作者:太空狗 更新时间:2023-10-29 21:58:08 25 4
gpt4 key购买 nike

我有一个非常有趣但令人沮丧的问题。我有一个使用标准 ASP.NET 身份验证运行的 MVC 4 站点。

在且仅在 Windows 8 上的 IE 10 组合中,当我遍历我的站点并从 https url 导航到 http url(两者都在同一站点上)时,它会生成不同的 asp.net_sessionid 值。在我尝试过的所有其他浏览器/操作系统组合中,这似乎不是问题。

我到处搜索,虽然我确实发现有人遇到了各种身份验证问题(通常是关于 IIS7 无法将 IE10 识别为浏览器),但我没有发现任何其他人声称遇到过这个确切的问题。更令人担忧的是,我发布了一个“开箱即用”的 MVC 模板项目,它也有同样的问题。我不可能是唯一遇到过这个问题的人(我希望如此)。

还有其他人遇到过这个吗?或者甚至只是有一些建议?

谢谢

更新

好的,那么还有一个更重要的方面。我在负载平衡的环境中运行它。如果我将应用程序推送到单个服务器并进行测试,我没有任何问题。

最佳答案

您提到您在负载平衡环境中遇到过这个问题,对吗?我假设您正在使用默认的“In Proc”方法来存储 session 数据。如果是这样的话,那么我想我知道会发生什么。 (为了争论,我假设有 2 个服务器,但是如果你有更多的服务器并不重要)

你被发送到 ServerA 并创建了一个 session 。因为这是 In Process ServerB 对此一无所知。最终(以及如何发生取决于您的负载平衡器的设置方式。粘性 session ?Cookies?循环法?)您将被发送到 ServerB。因为那个服务器不知道你已经有了一个 session ;将创建一个新 session ID,并为您提供一个新 session ID。

那么为什么它会在您的精确重现步骤下发生?好吧,我的预感是如果有足够的时间和负载,您会看到它只是从/page1 导航到/page2。再次 - 这取决于您的负载平衡器的设置方式,但可能是因为您正在更改触发某些内容的协议(protocol)并且您被发送到池中的另一台服务器。

如何解决?
首先,确保你在他们的 machine.config 中有相同的机器 key 。如果您无权访问它,我认为它可以在 web.config 中运行,但我还没有尝试过。

现在,设置另一种方式来存储 session 状态。在 Sql Server 或 MySql 或 Postgres 或任何地方。如果你有 SQL Server,那将是最简单的,因为驱动程序已经构建了它,但如果你有另一个数据存储,你将需要构建或找到一个库来完成它。我参与了一个使用 Postgres 存储 session 状态的项目。

我们使用了 npgsql作为连接到服务器的驱动程序,并构建了我们自己的 PgsqlSessionProvider:SessionStateStoreProviderBase 并将其连接起来实际上非常容易

<sessionState mode="Custom" customProvider="PgsqlSessionProvider">
<providers>
<add name="PgsqlSessionProvider" type="My.namespace.PgsqlSessionStateStore" connectionStringName="connectionStringName" writeExceptionsToEventLog="true" />
</providers>
</sessionState>

关于c# - IE10 和 Windows 8 以及 ASP.NET MVC (IIS 7),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19387475/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com