我有用户使用Facebook登录我的网站。他们被从我的网站发送到Facebook,然后在他们授予网站许可后重新导向。我面临的问题是访问我在离开网站之前设置的会话变量。当用户返回该网站时,会创建一个全新的会话。奇怪的是,如果用户浏览网站,一些页面的原始会话将被访问,有时是新创建的会话。 我试过创建cookie: Response.Cookies [“user”] [“LoggedIn”] =“true”; 只要用户没有离开我的网站,我就可以很好地访问这些饼干,但只要他们离开并回来,我似乎也无法访问这些饼干。所以我的问题是,在用户从网站发送到重定向之前,什么才是保留数据的最佳方式?C#如何在OAuth重定向之后坚持Session或Cookie信息?
AccountController:
public void Login()
{
Session["BeforeLogin"] = "foo";
redirect(FacebookUrl);
}
//Where Facebook redirects the user back to
public ActionResult OAuth(string code, string state)
{
if (LoginSuccessful)
{
Session["LoggedIn"] = true;
}
return View();
}
HomeController:
public HomeController()
{
setLoggedInSession();
}
public void setLoggedInSession()
{
//This is where I'm having the inconsistency
string foo = Session["BeforeLogin"];
ViewData["LoggedIn"] = Session["LoggedIn"];
//It'll either be BeforeLogin is null and LoggedIn is true
//or BeforeLogin will be "foo" and LoggedIn will be null
}
编辑: 有关此问题的一些新的信息。做一些测试我发现,当我只使用单个实例时,会话似乎工作正常。虽然我做高可用性(运行5个实例)是当我开始遇到问题时。最明显的是在IE中。我的假设是,当你从Facebook重定向到网站时,你会得到一个不同于你的实例,它会在它管理之前创建一个新会话来检索原始会话。
是的,如果您有两个实例,并且您只使用in proc会话提供程序,则会遇到此问题。使用appfabric缓存会话提供程序或sql服务器会话提供程序应解决您的问题。 – knightpfhor