Asp.net mvc MVC&x27;s ActionExecutingContext HttpContext.User.Identity.IsAuthenticated在登录多个浏览器选项卡时返回False

Asp.net mvc MVC&x27;s ActionExecutingContext HttpContext.User.Identity.IsAuthenticated在登录多个浏览器选项卡时返回False,asp.net-mvc,forms-authentication,iprincipal,browser-tab,Asp.net Mvc,Forms Authentication,Iprincipal,Browser Tab,在自定义ActionFilterAttribute的OnActionExecuting方法期间,我们确保用户在执行某些操作之前仍然登录。我们通过执行类似于以下伪代码的操作来实现这一点: public override void OnActionExecuting( ActionExecutingContext filterContext ) { if ( filterContext.HttpContext.User.Identity.IsAuthenticated ) {

在自定义ActionFilterAttribute的OnActionExecuting方法期间,我们确保用户在执行某些操作之前仍然登录。我们通过执行类似于以下伪代码的操作来实现这一点:

public override void OnActionExecuting( ActionExecutingContext filterContext )
{
    if ( filterContext.HttpContext.User.Identity.IsAuthenticated )
    {
        // Do something...
    }
}
我有多个站点用于在同一个域下运行的多个客户端,唯一的区别是虚拟目录名。每个虚拟目录实际上指向相同的文件夹/代码库,URL/virdir名称指示要从嵌套的/Clients目录中使用哪个“客户端配置文件”的代码。不确定是否需要site/code/IIS配置中的那个么多详细信息,但提供这些信息以防问题的罪魁祸首

如果我尝试使用浏览器的多个实例登录到多个站点,一切正常。当我尝试在站点周围导航时,IsAuthenticated检查返回true

但是,如果我尝试使用带有多个选项卡的单一浏览器登录多个站点,我会不断地来回注销。如果我登录到站点A,我可以四处导航,但一旦我登录到站点B,如果我尝试在站点A中的任何位置导航,IsAuthenticated将返回false

这是预期的行为吗?有解决办法吗


更新:我现在只能在IE中重现这种行为。在Firefox和Chrome中,无论我在同一个浏览器/多个选项卡上还是在多个浏览器上,我都会被引导到登录屏幕。IE处理饼干的方式有区别吗?或者Cookie不是罪魁祸首吗?

在不了解任何详细设置的情况下,我预计会发生这种情况

假设:

  • 您声明有多个虚拟目录指向一个代码库
  • 这些虚拟目录中的每一个都很可能被设置为IIS应用程序
  • 您没有在web.config中定义机器密钥,因此,每个虚拟目录都自动生成自己的加密/解密密钥
  • 可能发生的事情:

  • 当您从不同的浏览器登录时,每个浏览器都会获得一个身份验证cookie。因为您使用的是不同的浏览器,所以没有问题
  • 使用同一浏览器时,您登录到站点A,并获得一个用站点A自动生成密钥加密的加密cookie
  • 当您尝试转到另一个具有不同自动生成的机器密钥的虚拟目录时,站点无法读取身份验证票证(无法解密),因此返回logged-in=false
  • 登录到siteB后,身份验证cookie将替换为来自siteB的身份验证票证。此时,siteA无法再解密身份验证票证,并返回logged-in=false
  • 尝试使用适当的选项()设置web.config的机器密钥配置部分。是关于表单身份验证票证和流程的更多信息