感谢您花时间阅读我的问题。我们将访问该网站的访问者可能会到达其他用户的个人资料页面。然后,我们将鼓励他们登录该网站,或者如果他们当前不是会员,则注册为新网站。这些操作使它们远离它们所声明的初始页面/ 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);}
然后将其放入链接
答案 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将其放在查询字符串中。