繁体   English   中英

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

[英]IE10 and Windows 8 and ASP.NET MVC (IIS 7)

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

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

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

其他人遇到这个? 或者甚至只是提出一些建议?

谢谢

UPDATE

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

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

您将被发送到ServerA并创建会话。 因为这是In Process ServerB不知道它。 最终(以及如何发生这种情况取决于你的负载均衡器是如何设置的。粘性会话?Cookies?循环?)你将被发送到ServerB。 因为那个服务器不知道你已经有了会话; 创建一个新的,并为您提供一个新的会话ID。

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

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

现在,设置另一种存储会话状态的方法。 在Sql Server中或者MySql或Postgres或者任何地方。 如果您的SQL Server是最简单的,因为驱动程序是由它构建的,但是如果您有另一个数据存储区,则需要构建或找到可以执行此操作的库。 我参与了一个项目,我们使用Postgres来存储会话状态。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM