gpt4 book ai didi

asp.net - 如果/何时使用 "Azure Session State Provider (redis)"不需要使用 User.Identity.Name/IsAuthenticated?

转载 作者:行者123 更新时间:2023-12-01 23:23:04 25 4
gpt4 key购买 nike

在我们迁移到 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

关于asp.net - 如果/何时使用 "Azure Session State Provider (redis)"不需要使用 User.Identity.Name/IsAuthenticated?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29061098/

25 4 0