2

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

插图/示例:

访问者点击后到达站点:www.mysite.com/profiles/ID=108

然后访问者离开该页面进行登录。我们如何才能以某种方式最好地捕获 ID=108,以便(已登录)用户返回该配置文件页面有一个很好的选择?我从阅读中了解到 cookie 不是最佳选择,但由于用户尚未登录等,其他一些选项似乎让我的思维变得混乱。

我可以采取什么具体步骤以最好的 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);}

然后你把它放到你的链接中

4

3 回答 3

3

你有几个选择:

1)您可以在控制器中使用 Session 来存储值:

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

并在被调用的Controller中检索。

ID = Session["ID"];

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

return RedirectToAction("Edit", "Profile", new { ID = "108" });
于 2012-05-08T19:15:54.063 回答
2

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

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

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

于 2012-05-08T19:13:49.490 回答
1

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

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

我认为这是默认的会员提供者行为,但您可以让 ReferrerUrl 自行将其放置在查询字符串中。

于 2012-05-08T19:14:35.813 回答