ASP MVC 3:生产中有时会失去身份验证

时间:2012-04-16 15:22:53

标签: asp.net asp.net-mvc asp.net-mvc-3 forms-authentication

我正在使用MVC 3开发一个使用标准表单身份验证的Web应用程序。它托管在共享主机上。问题是有时用户身份验证状态丢失。我完全没有例外。你有什么可能的原因吗?

身份验证与会话有关吗?我根本不使用Session对象。 我的印象是使用cookie的身份验证可以在负载平衡的环境中工作。我错了吗?

会话在20分钟时间之前丢失。

2 个答案:

答案 0 :(得分:4)

这里有几件事情可以想到:

  1. 丢失的身份验证是否有任何模式?意思是,它总是在20分钟之后还是看起来很随意?

  2. 由于您使用的是共享主机,您是否在web.config中明确设置了机器密钥?如果不这样做并且它们被设置为自动生成,则如果应用程序是负载平衡的,则键将不同。因此,您在服务器A上进行身份验证,然后一些后续请求转到服务器B,您的应用程序将无法解码授权cookie并“将您踢出去”

  3.   

    在Web场中,您无法保证将处理哪个服务器   连续的请求。如果用户在一台服务器上进行了身份验证,那么   下一个请求转到另一个服务器,验证票据将   验证失败并要求用户重新进行身份验证。该   machineKey元素中的validationKey和decryptionKey属性   用于表单身份验证的散列和加密   票。这些属性的默认值是   AutoGenerate.IsolateApps。每个都自动生成密钥   应用程序,它们在每台服务器上都不同。因此,   在一台计算机上加密的身份验证票证不能   在Web场中的另一台计算机上解密并验证   同一Web服务器上的另一个应用程序。要解决这个问题,   validationKey和decryptionKey值必须完全相同   Web场中的计算机。

    在第二位看here for more information

答案 1 :(得分:0)

会话暂停,如果你通过它,你的会话(和身份验证)将被破坏。

你可以从web.config增加超时,或者这就是我去的方式,你可以制作一个你每隔几分钟用AJAX ping一次的虚拟页面。后者的优点是,当用户关闭浏览器时,您的会话仍将及时终止,而不是使用资源停留半小时并阻止Application_OnExit运行。