在我们迁移到 Azure 农场后,我已将 Azure session 状态提供程序 (redis) 暗示到我的 asp.net mvc 应用程序,但某些授权页面将我重定向到登录页面! 那是因为我在某些操作中使用了 User.Identity.Name 或 User.Identity.IsAuthenticated !! 我是否必须将 User.Identity.Name 替换为:
// instead of below line
//Boolean usern = User.Identity.IsAuthenticated;
// is below lines :
Boolean usern = "";
object objValue = Session["usersession"];
if (objValue != null)
{ usern = true;}
else {usern = false;}
是这样吗?如果不是的话为什么用户有时会重定向到再次登录!
请您参考如下方法:
这可能不是 session 问题,而是身份验证 cookie/票证问题。即使您只使用单个实例/角色,Azure 也很可能对其服务器进行负载平衡(这为它们提供了可靠性%)。这意味着您的应用程序实际上同时存在于多个服务器上。
.NET 应用程序中的 MachineKey 负责加密和解密您的身份验证 cookie。在您的 web.config 中,如果您没有正确定义 <machineKey>
属性,那么 IIS 就会为你生成一个机器 key 。如果您没有定义,运行该应用程序的每个服务器都会创建自己的计算 secret 钥。因此,一台服务器能够解密并读取您的身份验证票证,而下一个请求将发送到另一台服务器,该服务器无法解密身份验证票证,因为它是使用不同的 key 加密的,并且该服务器认为您尚未登录。
要解决此问题,请打开 web.config 文件并定义 <machineKey>
属性并重新部署。使用新部署的应用程序登录后,您应该会看到此问题消失。