2013-02-28 107 views
0

我找了一下在正确的方向上点......ASP.net MVC - 身份验证cookie和重定向

我们有一个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"); 
    } 
} 

我遇到的问题是这样的 - 如果我开始一个新的浏览器(使用火狐在一分钟,以查看饼干),并执行以下操作:

  1. 登录使用'dir1'网址进入网站。
  2. 我得到认证很好 - 我可以看到包含我们的身份验证cookie的set-cookie http头。这个回应也会将我重定向到'dir2'。
  3. 在随后的页面上,当我查看cookie时,auth cookie不存在 - 这是问题所在。

为了增加我的困惑,如果我再次调出登录页面(同一浏览器,会话未关闭),并再次尝试此操作,它将起作用。任何人都有线索?

回答

0

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

+0

这将是我的赌注,但我正在寻找细节,为什么发生,所以我可以缓解它。这个重定向必须发生。 – Paddy 2013-02-28 10:15:24

+0

我明白了。我并不是建议你完全删除重定向;我的意思是将其从您的登录操作*仅* *中删除。不仅仅是为了解决手头的问题,还因为它有道理;毕竟,如果用户尚未登录,您将如何知道用户是否在正确的目录中? – 2013-02-28 10:18:59

+0

对不起,澄清,这个重定向发生在登录控制器后,也就是我们知道他们被认证之后。 – Paddy 2013-02-28 10:20:42