我有一个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