【问题标题】:Redirect to last visited page (stored in a cookie)重定向到上次访问的页面(存储在 cookie 中)
【发布时间】:2011-08-07 17:16:42
【问题描述】:

在我们的 MVC 应用程序中,我们希望用户在登录后被重定向到他在上一个会话中最后访问的页面。

实现这一目标的好方法是什么?

我正在考虑httpmodule-->begin request or via the global.asax

我应该在请求过程中的哪个点放置逻辑来检查 cookie 是否存在并进行重定向?在Application.init?

任何建议将不胜感激!

【问题讨论】:

  • 你为什么要把简单的事情变得复杂?只需检查登录按钮单击事件。
  • 瓦卡斯是对的。在与登录按钮单击对应的操作中执行此操作将是执行此操作的方法。
  • @Waqas, @Naraen 你们都错了。 mvc中不存在按钮点击事件
  • @archil,你是对的,但是必须有某种查看方法,通过db检查用户名和密码。
  • 您能提供您的工艺流程吗?如 1. 用户访问我们的网站 2. 进入登录屏幕(自动/手动) 3. 登录...等。这将使我们能够分析您做错了什么。就 RedirectToSomething 而言,您的重定向肯定应该在控制器操作中...所以您在这里做错了。

标签: asp.net asp.net-mvc redirect cookies httpcookie


【解决方案1】:

您可以创建一个custom action filter,将当前请求的 URL 保存到 cookie。然后检查登录操作方法中的 cookie 值,并在必要时重定向。

在这样做时,您可以只装饰您想要的作为潜在入口点的控制器和操作。例如不是返回部分视图等的操作。

【讨论】:

    【解决方案2】:

    没错,点击时没有事件。但是,有一个更简单的解决方案,MVC 可以很好地处理表单提交和重定向。要存储上次访问的 URL,您可以在控制器上使用 action filter。然后处理重定向,创建两个登录函数。一个处理 GET 请求,另一个处理 POST 请求。在 POST 请求中,验证身份验证后,从 cookie 中检索 URL(或操作)并重定向用户。

    应该是这样的:

    [HttpGet]
    public ActionResult Login()
    {
        return View();
    }
    
    [HttpPost]
    public ActionResult Login(LoginViewModel model)
    {
        if (authenticated)
        {
            //get cookie information
            HttpCookie cookie;
            cookie = Request.Cookies["StoredURLFromLastSession"];
            String StoredURLFromLastSession = cookie.Value;
    
            //Choose one of these redirect methods
            //returns to a hard coded URL
            //return Redirect(StoredURLFromLastSession);
    
            //redirects to a route (using routes created in global.asax
            //return RedirectToRoute(StoredURLFromLastSession);
    
            //redirects to a specific action/controller
            //return RedirectToAction(StoredURLFromLastSession);
        }
    }
    

    希望这会有所帮助。

    【讨论】:

    • 我们所有的控制器都继承自名为“应用程序控制器”的控制器。这个应用程序控制器包含一个“OnAuthorization”方法。这应该是放置逻辑的地方吗?
    • @HerbalMart,我不建议这样做。上面的代码示例已经处理了登录事件。您只有一个登录操作,在该操作期间,验证身份验证后,您重定向用户。使用 onauthenticate 将意味着您使用 [authorize] 属性,而不需要它的用途。创建属性的想法是跟踪用户访问的最后一个 URL。
    猜你喜欢
    • 1970-01-01
    • 2022-12-10
    • 1970-01-01
    • 1970-01-01
    • 2014-08-26
    • 2014-09-18
    • 2010-11-29
    • 2023-03-22
    • 2012-06-06
    相关资源
    最近更新 更多