【发布时间】:2015-06-08 09:57:34
【问题描述】:
我有一个 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");
}
}
但问题是会话变量不存在 它总是让我回到登录屏幕
我发现在设置会话后进行重定向会导致此行为,但我找不到解决此问题的答案...
所以我对此有一些疑问:
- 为什么它在我的本地机器上运行而不是在服务器上运行?
- 我可以修改服务器设置以按照我的意图工作吗?它会在重定向后回收东西吗?
- 我能否像在服务器上一样通过某些设置在本地计算机上重现此行为?
- 必须有一个简单的方法来解决这个问题,还是我错了?我真的需要将会话变量存储在数据库或类似的东西中吗?
【问题讨论】:
-
从来没有用户会话用于身份验证目的......不要这样做。它非常不安全且不可靠(IIS 可以随时终止会话)。 ASP.NET 提供了一种身份验证机制(实际上有几种),使用它们。 MVC4 的 FormsAuthentication。
标签: c# asp.net asp.net-mvc-4 session