在我们迁移到 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>属性并重新部署。使用新部署的应用程序登录后,您应该会看到此问题消失。

Forms authentication and Machine Key information on MSDN

Machine Key Generator


评论关闭
IT序号网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!