我有一個MVC4的web應用程序,當我在Visual Studio中運行它時,它在我的本地機器上完美工作。RedirectToAction後失去了Asp MVC會話
因此,我發佈網站到服務器去與我的應用程序生活。 但是,當我嘗試登錄我的應用程序去下面的代碼:
[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");
}
}
但問題是,會話變量不存在 和它總是發送回我的登錄屏幕
我發現在設置會話後做重定向導致此行爲,但我找不到解決此問題的答案...
所以我有一些關於它的問題:
- 它爲什麼我的本地機器上,而不是在服務器上運行?
- 我可以修改服務器設置以這種方式工作,我願意做什麼?它是否在重定向後回收東西?
- 我可以在本地機器上重現此行爲,就像在服務器上使用某些設置一樣?
- 必須有一個簡單的方法來解決這個問題,或者我錯了嗎?我真的需要將會話變量存儲在數據庫中嗎?
永遠不會有EVER EVER EVER用戶會話進行身份驗證...不要這樣做。它是非常不安全的,並且不可靠(IIS可以在感覺時終止會話)。 ASP.NET提供了一種認證機制(實際上有幾種),使用它們。 FormsAuthentication for MVC4。 – 2015-04-03 14:17:39