[英]Asp MVC session lost after RedirectToAction
我有一個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");
}
}
但是問題是會話變量不存在,它總是將我發送回登錄屏幕
我發現在設置會話后執行重定向會導致此行為,但我找不到解決此問題的答案...
所以我對此有一些疑問:
您是否具有帶負載平衡的群集服務器(如果是),則可能要在其上啟用粘性會話,以便來自一個會話的所有請求都發送到同一服務器。
如果您有服務器群集答案:
1)將會話存儲在內存中時,您要確保所有請求都發送到同一服務器,否則將在服務器上收到此錯誤,但不是在本地。
2)如果僅在服務器上啟用粘性會話,則該錯誤可能會消失。
3)如果錯誤是由於群集引起的,那么您將無法在本地復制它。
4)如果無法在loadbalancer上啟用粘性會話,則可能必須將會話存儲到所有群集服務器均可訪問的文件中,或將其存儲在數據庫中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.