0

我正在寻找正确方向的一点...

我们有一个 MVC 站点,有各种虚拟目录,它们都指向相同的代码,例如

https://www.x.com/dir1
https://www.x.com/dir2

由于 URL 的“内容”,不同的虚拟目录部分用于商业原因,部分用于控制站点的外观。

这些站点被锁定以使用表单身份验证进行访问,我正试图找出一个稍微难以捉摸的问题。

用户使用 url 'dir1' 登录站点,验证良好,调用 SetAuthCookie。

我们的代码在整个站点的 OnActionExecuting 上运行 - 它获取登录用户并确定他们应该访问的虚拟目录(每个用户一个),如果它们位于错误的 URL 中,将重定向它们,例如(简化代码):

protected override void OnActionExecuting(ActionExecutingContext filterContext)
{
    if (Authenticated && UserIsNotInCorrectDirectory())
    {
        filterContext.Result = new RedirectResult("https://www.x.com/dir2");
    }
}

我遇到的问题是 - 如果我启动一个新的浏览器(此时使用 firefox 来查看 cookie)并执行以下操作:

  1. 使用 'dir1' url 登录网站。
  2. 我通过了身份验证——我可以看到包含我们的身份验证 cookie 的 set-cookie http 标头。此响应还将我重定向到“dir2”。
  3. 在随后的页面上,当我查看 cookie 时,auth cookie 不存在 - 这就是问题所在。

为了增加我的困惑,如果我再次打开登录页面(相同的浏览器,会话未关闭),然后再试一次,它就可以了。有人有线索吗?

4

1 回答 1

0

我敢打赌,您的OnActionExecuting过滤器会妨碍您的登录表单,并且当您覆盖结果时,您的会话 cookie 会丢失。如果此代码驻留在属性中,我会尝试从您的Login操作中删除该属性,看看是否有效。

于 2013-02-28T10:07:47.217 回答