我正在使用cookie,如果设置了cookie,它将将用户转发到签名,否则它显示了一个错误页面(未经授权)。 cookie的设置正确,如果我通过在地址栏中键入任何页面来导航到任何页面,则可以正常工作。但是,当我使用RedirectToAction或Formauthentication时。Redirecttologin不可用,这会导致无限循环重定向。

主页 - 如果用户有cookie,请转到Signin,如果不显示主页。

SIGNIN-如果用户有cookie,请显示页面,否则重定向到家

我的重定向是通过属性来处理的。

public sealed class RequireBillerAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        IUserSession session = ServiceLocator.Locate<IUserSession>();

        if (session.BillerId == 0)
            filterContext.Result = new RedirectResult("~/");
    }
}

我的家庭行动看起来像这样

    public ActionResult Index()
    {
        //if the user is signed in, send them to their account page.  They don't need to see the front page
        if (Request.IsAuthenticated)
        {          
            return RedirectToAction("Index", "Account");
        }

        //users with their cookie set should sign in
        if (session.BillerId != 0)
            return RedirectToAction("Index", "SignIn");

        return View();
    }

我的标志行动看起来像这样

    [RequireBiller]
    public ActionResult Index()
    {
        SignInModel model = BuildSignInModel();

        return View(model);
    }

现在,当我达到mysite.com/时,重定向会导致无限循环。在调试中,该属性无法从cookie找到值。 cookie实际上在请求中是空白的。当我键入mysite.com/signin时,一切都可以使用桃红色。有任何想法吗?

编辑

正如建议的,我跑了提琴手。这是请求的样子

#   Result  Protocol    Host    URL Body    Caching Content-Type    Process Comments    Custom  
1   302 HTTP    localhost:27412 /   124 private     text/html; charset=utf-8    chrome:6008         
2   302 HTTP    localhost:27412 /SignIn 118 private     text/html; charset=utf-8    chrome:6008         
3   302 HTTP    localhost:27412 /   124 private     text/html; charset=utf-8    chrome:6008         
4   302 HTTP    localhost:27412 /SignIn 118 private     text/html; charset=utf-8    chrome:6008 

这是cookie信息

第一的

__RequestVerificationToken_Lw__=NNu8v2oTMX2YKQOW+JRN1LQRYPhlmPszQa8Rs1KrQp1pPxWmQO8GG7eRrzbhFZF38p05ckuLHAK3QaTIlxeFJ6POTX1woXRx/ahApLpF529inJO9mj3jSnoHqG6fthzJpoLYQL61NOCCUO2wwzLmQg==; 4%40F0NKYBBQCTD4G9YL1J8KDNCWDQRPIXREHLUMP2LC*= P%2FFJD5CDLO0PCGU6GNTAPW*= p6qaytldvurkqn84c9vdvg*

第二

4%40F0NKYBBQCTD4G9YL1J8KDNCWDQRPIXREPRUMP2LC*=; __RequestVerificationToken_Lw__=NNu8v2oTMX2YKQOW+JRN1LQRYPhlmPszQa8Rs1KrQp1pPxWmQO8GG7eRrzbhFZF38p05ckuLHAK3QaTIlxeFJ6POTX1woXRx/ahApLpF529inJO9mj3jSnoHqG6fthzJpoLYQL61NOCCUO2wwzLmQg==; 4%40F0NKYBBQCTD4G9YL1J8KDNCWDQRPIXREHLUMP2LC*= P%2FFJD5CDLO0PCGU6GNTAPW*= p6qaytldvurkqn84c9vdvg*

第三

__RequestVerificationToken_Lw__=NNu8v2oTMX2YKQOW+JRN1LQRYPhlmPszQa8Rs1KrQp1pPxWmQO8GG7eRrzbhFZF38p05ckuLHAK3QaTIlxeFJ6POTX1woXRx/ahApLpF529inJO9mj3jSnoHqG6fthzJpoLYQL61NOCCUO2wwzLmQg==; 4%40F0NKYBBQCTD4G9YL1J8KDNCWDQRPIXREHLUMP2LC*= P%2FFJD5CDLO0PCGU6GNTAPW*= p6qaytldvurkqn84c9vdvg*

第四

4%40F0NKYBBQCTD4G9YL1J8KDNCWDQRPIXREPRUMP2LC*=; __RequestVerificationToken_Lw__=NNu8v2oTMX2YKQOW+JRN1LQRYPhlmPszQa8Rs1KrQp1pPxWmQO8GG7eRrzbhFZF38p05ckuLHAK3QaTIlxeFJ6POTX1woXRx/ahApLpF529inJO9mj3jSnoHqG6fthzJpoLYQL61NOCCUO2wwzLmQg==; 4%40F0NKYBBQCTD4G9YL1J8KDNCWDQRPIXREHLUMP2LC*= P%2FFJD5CDLO0PCGU6GNTAPW*= p6qaytldvurkqn84c9vdvg*

这就是我在地址栏中输入 /登录时的样子

__RequestVerificationToken_Lw__=NNu8v2oTMX2YKQOW+JRN1LQRYPhlmPszQa8Rs1KrQp1pPxWmQO8GG7eRrzbhFZF38p05ckuLHAK3QaTIlxeFJ6POTX1woXRx/ahApLpF529inJO9mj3jSnoHqG6fthzJpoLYQL61NOCCUO2wwzLmQg==; 4%40F0NKYBBQCTD4G9YL1J8KDNCWDQRPIXREHLUMP2LC*= P%2FFJD5CDLO0PCGU6GNTAPW*= p6qaytldvurkqn84c9vdvg*

是的,我的饼干被加密了。 Cookiename是“ 4%40F0NKYBBQCTD4G9YL1J8KDNCWDQRPIXREPRUMP2LC*”在我看来,重定向是在其中加入一个新的空cookie。为什么?我不确定。

额外的调试后,我发现请求中确实有3个cookie。第一个是空的cookie,默认情况下使用该名称时会返回。集合中的第三个cookie具有值集。为什么它将此cookie附加到请求中是一个谜。我可能可以通过选择比另一个值具有价值的cookie来解决这个问题,但是我宁愿解决根本问题,无论它是什么,这种问题仅在signin页面上发生。

有帮助吗?

解决方案

我认为正在发生的事情是,RedirecttoAction正在执行响应。redirect(),它终止了请求的处理,并且不允许设置cookie。听起来像是在此处记录的类似问题:

http://weblogs.asp.net/bleroy/archive/2004/08/03/207486.aspx

其他提示

我有一个cookie在调用RedirectToAction()后无法正确设置。我最终使用了此答案中所述的tempdata []: https://stackoverflow.com/a/3624353/1265197

这是我的代码。帐户字符串是通过名为“帐户”的URL上的查询字符串检索的:

public ActionResult OriginatingAction(string account)
{
    //Some other code
    TempData["data"] = account; 

    return RedirectToAction("RedirectAction");
}

然后,我可以使用tempdata [“ data”]在我重定向到的操作中设置cookie:

public ActionResult RedirectAction()
{
    if(TempData["data"] != null)
    {
        HttpCookie dataCookie = new HttpCookie("dataCookie");
        dataCookie.Values.Add("account", TempData["data"] as string);
        dataCookie.Expires = DateTime.Now.AddHours(12);
        Response.Cookies.Add(dataCookie);
    }

    return View();
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top