我有一个MVC4 Web应用程序,当我在Visual Studio中运行它时,它在我的本地机器上运行得很好。
因此,我将网站发布到服务器以使用我的应用程序。 但是当我尝试登录我的应用程序时,请转到以下代码:
[HttpPost]
public ActionResult CheckLogin(LoginViewModel vm)
{
if (!String.IsNullOrWhiteSpace(vm.UserName) && !String.IsNullOrWhiteSpace(vm.Password))
{
User u = ...
// Get user from database with credentials
System.Web.HttpContext.Current.Session.Add("UserIdSession", u.Id);
return RedirectToAction("Validate", "Overview");
}
else
{
// process the error that the login failed
}
}
重定向转到以下操作:
[HttpGet]
public ActionResult Validate()
{
if (HttpContext.Current.Session["UserIdSession"] != null)
{
return View();
}
else
{
return RedirectToAction("Index", "Login");
}
}
但问题是会话变量不存在 它总是把我送回登录屏幕
我发现在设置会话后进行重定向会导致此行为,但我无法找到解决此问题的答案...
所以我对此有一些疑问:
答案 0 :(得分:1)
您是否拥有负载均衡的群集服务器,如果是,那么您可能希望在其上启用粘性会话,以便来自一个会话的所有请求都转到同一服务器。
如果您有服务器群集 答案:
1)当您将会话存储在memeory中时,您希望确保所有请求都发送到同一服务器,否则您将在服务器上收到此错误,但不是本地错误。
2)如果您只是在服务器上启用粘性会话,则此错误可能会消失。
3)如果错误是由于群集造成的,那么就无法在本地重现错误。
4)如果无法在loadbalancer上启用粘性会话,则可能必须将会话存储到所有群集服务器都可访问的文件中,或将其存储在db中。