MVC3应用程序并跟踪用户最初输入的页面

时间:2012-05-08 19:08:30

标签: asp.net-mvc-3 url cookies login registration

感谢您花时间阅读我的问题。我们将访问该网站的访问者可能会到达其他用户的个人资料页面。然后,我们将鼓励他们登录该网站,或者如果他们当前不是会员,则注册为新网站。这些操作使它们远离它们所声明的初始页面/ URL,但我们希望能够在完成登录/注册后通过“跟踪”它们开始的位置“跳转”回到该页面。 (注意:如果重要的话,我们正在使用标准的Microsoft成员资格提供程序类。)“跳回”部分似乎很简单,这就是问题的“保持跟踪”部分。

插图/示例:

点击访问者访问该网站:www.mysite.com/profiles/ID=108

然后访问者离开该页面进行登录。我们怎样才能以某种方式最好地捕获ID = 108,以便(登录)用户返回该配置文件页面有一个很好的选择?我从阅读中理解,饼干不是最佳的,但是由于用户还没有登录等等,其他一些选项似乎会让我的思维陷入困境。

我可以采取哪些具体步骤以最好的MVC3方式解决这个问题?

编辑:

    public ViewResult MyProfile(int? id)
    { 
    HttpCookie cookie = new HttpCookie("MySiteCookie");
    cookie.Value = id.ToString();
    cookie.Expires = DateTime.Now.AddYears(1); //or whatever time is appropriate
    System.Web.HttpContext.Current.Response.Cookies.Add(cookie);

    //do some other stuff
    }

另一方面,为了使用cookie,我已经以这样的方式(临时)将其放入菜单中:

    var MyProfileId = "";
    if (Request.Cookies["MySiteCookie"] != null)
    {HttpCookie cookie = request.Cookies["MySiteCookie"];
    MyProfileId = Server.HtmlEncode(cookie.Value);}

然后将其放入链接

3 个答案:

答案 0 :(得分:3)

您有几个选择:

1)您可以在Controller中使用Session来存储值:

Session.Remove("ID");
Session.Add("ID", "108")

并在被调用的Controller中检索。

ID = Session["ID"];

2)您可以从登录控制器传递查询字符串上的ID = 108:

return RedirectToAction("Edit", "Profile", new { ID = "108" });

答案 1 :(得分:2)

  

我从阅读中了解到饼干不是最佳的

IMHO cookies是解决此问题的最佳方法。当匿名用户登陆个人资料页面时,只需发出一个包含他当前正在查看的个人资料id的cookie。然后,当他成功登录时,读取此cookie值以获取id并构建重定向链接并将其重定向到此链接。

另一种可能性是使用服务器端会话,但我提到这只是cookie的替代品而不是我推荐的东西。

答案 2 :(得分:1)

您可以重定向到登录操作,将Url添加到查询字符串参数。

让我们说:www.mysite.com/login?ReturnUrl='www.mysite.com/profiles/ID=108'

我认为这是默认的成员资格提供程序行为,但您可以让ReferrerUrl将其放在查询字符串中。