1

好的,首先我想说我不知道​​我在做什么。

我的 MVC 项目中有几个页面不断受到不同页面的影响。例如,我的一个模型的编辑页面可以来自详细信息页面或 Crud 索引页面上的管理链接。完成编辑后,我想将用户送回正确的位置。考虑到我不了解 Identity returnUrl 的东西,我编写了自己的方法来创建两个 cookie,最终我可能不需要两个,但现在我有两个,这样我就可以在 Chrome F12 工具中监控它们的更新并确保每个当我在控制器操作中使用此方法时,它正在做正确的事情。我还想说我也没有为此做任何测试。我的测试是反复试验和 Chrome F12。

这是代码:

private void LastActionHero()
{
    string lastUrl = null;
    var currentUrl = Request.Url.LocalPath;

    if (Request.Cookies["currentUrl"] != null)
    {
        lastUrl = Request.Cookies["currentUrl"].Value;
    }

    if (lastUrl != currentUrl)
    {
        var current = new HttpCookie("currentUrl", currentUrl)
                      {Expires = DateTime.Now.AddDays(1)};
        Response.Cookies.Set(current);
        var previous = new HttpCookie("lastUrl", lastUrl)
                       { Expires = DateTime.Now.AddDays(1) };
        Response.Cookies.Set(previous);
    }
}

问题: 有没有更好的方法来做到这一点,这是否安全?网站的一部分不在登录后面。这有关系吗?

你对我应该如何实现这个有什么想法吗?

我仍在研究如何使用它。

这是 cookie 的屏幕截图,它们似乎工作正常我在 3 或 4 个操作中来回多次使用该方法,这里显示了正确的最后 2 个 URL:

在此处输入图像描述

4

1 回答 1

1

只要同一会话中的用户一次只打开一个页面,您的“cookie 方法”就可以工作。如果用户例如在一个选项卡中输入这样的页面,然后在从另一个选项卡离开另一个页面之前,它将不再起作用。

解决此问题的一种方法是向该页面提供“返回 URL”。因此,/Edit/1您无需调用类似的方法/Edit/1?returnUrl=CurrentUrl,然后在编辑页面上使用该参数以在编辑完成后返回正确的页面。

于 2014-12-23T10:05:02.953 回答