在自定义 ActionFilterAttribute 的 OnActionExecuting 方法期间,我们确保用户在执行某些操作之前仍处于登录状态。我们通过执行类似于此伪代码的操作来做到这一点:
public override void OnActionExecuting( ActionExecutingContext filterContext )
{
if ( filterContext.HttpContext.User.Identity.IsAuthenticated )
{
// Do something...
}
}
我有多个站点,用于在同一域下运行的多个客户端,唯一的区别是虚拟目录名称。每个虚拟目录实际上都指向相同的文件夹/代码库,并且 URL/virdir 名称指示要使用嵌套 /Clients 目录中的“客户端配置文件”的代码。不确定是否需要站点/代码/IIS 配置中的那么多细节,但提供以防万一是问题的罪魁祸首。
如果我尝试使用浏览器的多个实例登录多个站点,一切正常。当我尝试在站点中导航时,IsAuthenticated 检查返回 true。
但是,如果我尝试使用具有多个选项卡的单个浏览器登录多个站点,我会不断地来回注销。如果我登录到站点 A,我可以四处导航,但是一旦我登录到站点 B,如果我尝试在站点 A 中的任何位置导航,IsAuthenticated 就会返回 false。
这是预期的行为吗?有解决方法吗?
更新:我现在只能在 IE 中重现这种行为。在 Firefox 和 Chrome 中,无论我在同一个浏览器/多个选项卡还是多个浏览器上,我都会被引导到登录屏幕。IE 处理 cookie 的方式有区别吗?还是饼干不是罪魁祸首?