簡體   English   中英

在RedirectToAction之后,Asp MVC會話丟失

[英]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. 必須有一個簡單的方法來解決這個問題,否則我錯了嗎? 我真的需要將會話變量存儲在數據庫中嗎?

您是否具有帶負載平衡的群集服務器(如果是),則可能要在其上啟用粘性會話,以便來自一個會話的所有請求都發送到同一服務器。

如果您有服務器群集答案:

1)將會話存儲在內存中時,您要確保所有請求都發送到同一服務器,否則將在服務器上收到此錯誤,但不是在本地。

2)如果僅在服務器上啟用粘性會話,則該錯誤可能會消失。

3)如果錯誤是由於群集引起的,那么您將無法在本地復制它。

4)如果無法在loadbalancer上啟用粘性會話,則可能必須將會話存儲到所有群集服務器均可訪問的文件中,或將其存儲在數據庫中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM