感谢您抽出时间阅读我的问题。我们将有访问者的网站,可能会到达另一个用户的个人资料页面。然后,我们将鼓励他们登录到该网站,或注册为新的,如果他们目前不是会员。这些操作使他们远离他们声明的初始页面/URL,但我们希望能够在完成登录/注册后通过“跟踪”他们开始的位置来“跳转他们”回到那个页面。(注意:如果重要的话,我们使用标准的Microsoft成员资格提供程序类。)“跳回”部分看起来很简单,“跟踪”部分是问题所在。
一个插图/示例:
访问者在点击www.mysite.com/profile/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);}
然后你把它放到你的链接里
发布于 2012-05-08 19:13:49
我从阅读中了解到cookie并不是最好的
IMHO cookies是解决这个问题的最好方法。当一个匿名用户登陆配置文件页面时,只需发出一个cookie,其中包含他当前正在查看的配置文件的id
。然后,当他成功登录时,读取此Cookie值以获得id
,并构建重定向链接,并将他重定向到此链接。
另一种可能性是使用服务器端会话,但我只是将其作为cookies的替代方案,而不是我推荐的方案。
发布于 2012-05-08 19:15:54
您有几个选项:
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-08 19:14:36
您可以重定向到登录操作,将Url添加到查询字符串参数。
比方说:www.mysite.com/login?ReturnUrl='www.mysite.com/profiles/ID=108'
我认为这是默认的成员资格提供程序行为,但您可以自行让ReferrerUrl将其放入查询字符串中。
https://stackoverflow.com/questions/10504880
复制相似问题