ASP.net会话cookie丢失或删除
我有一个ASP.NET 2.0站点,用于存储会话中的用户ID以表明它们已登录。在某些情况下,用户似乎不会保持登录状态。我一直在监视Fiddler中的流量,并且一些细节我发现:
任何想法可能导致这种情况?
编辑:生产环境具有www.DomainX.com和DomainX.com的域。 还有另一个已知的问题,即没有为这两个域设置Cookie。 这可能与此有关,但在修复版本发布之前我无法进行测试。
您将需要查看会话状态提供程序,以查看它是否可以在.net应用程序的两个服务器/实例上运行。 如果它们被设置为inProc,那么你最肯定会遇到这个问题,因为每个会话都会绑定到它创建的线程。 相反,您希望将此抽象为两台机器都可以访问的asp.net状态服务,或者更好的是您应该使用分布式缓存解决方案,例如Microsoft Velocity项目,该解决方案将在两台机器之间分配会话以防万一停机。
处理这个问题的一些其他方法是在负载平衡器上使用粘性会话(不推荐)或移动到无cookie的会话,这会工作,但可能会在代码中造成一些麻烦。
在我们的业务中,我们有一台主服务器和一台辅助服务器,后面有一个分布式缓存,这样如果一台机器停机,另一台机器可以接管。 同样的原则也适用于负载均衡,一旦你开始在应用程序池中拥有多台机器甚至多个实例,你将不得不为此编写代码。
如果您使用Velocity进行会话,请务必确保您选择用于存储会话的缓存不可清除。
我认为Middletone是正确的,除了:它不能解释为什么这个问题不能用Firefox来谴责。 负载均衡器是第一嫌疑犯; 通过除了一个应用服务器之外的所有应用服务器离线(如果可行的话,并且在它可以处理负载的时间内),并且看问题是否仍然存在,那么看看它是否得到了别名是很好的。 如果是这样,它不是负载平衡器,你可以开始寻找其他地方。 否则,它是负载平衡器。
顺便说一下:粘滞会话不好,因为它上面的会话不受冗余保护。 此外,负载均衡器无法在某个时间点分发给负载最轻的服务器,只能在会话开始时决定,然后将用户保留在他/她所在的位置。
如果事实证明您在这里遇到了负载均衡问题,那么我要做的第一件事就是开启会话粘性,然后可能会寻找另一种解决方案,使其适应生产环境的舒缓背景。
拍摄,我必须丢失我的cookie并且能够回复和编辑...
通过修改我的主机文件,直接指向每个Web服务器的IP地址,我确实将负载平衡器作为问题进行了探索,但这没有任何影响。 我认为客户的IT人员会不约而同地要求关闭负载平衡。
我们确实有一个独立的状态服务器在运行,它与在同一台服务器上托管的其他站点上使用了几年的服务器一样。 不一定没有问题,但没有这样的问题。
作为一种创可贴,我目前正在测试其他的持久性机制......
链接地址: http://www.djcxy.com/p/44563.html