【发布时间】:2013-01-04 23:35:50
【问题描述】:
我创建了一个 ASP.NET MVC 应用程序,它在用户登录后将其用户信息保存在会话中。没什么特别的,只是一个简单的应用程序。
最近我注意到这种奇怪的行为,Session 在重建后第一次运行时不会保存。而且是一致的。
这是一个例子:
- 重建解决方案
- 打开登录页面,输入凭据
- 登录验证,重定向到仪表板,但仪表板显示未找到会话
- 返回登录页面,输入相同的凭据
- 登录验证,重定向到仪表板没有问题
在完美的情况下,第 3 项不应该有任何错误,因为在验证时,会话被设置为标记用户已登录的应用程序。
我想知道我是否错过了这里的某些内容,或者这就是 Session 的工作方式。我希望有人可以为我提供一些启示。
[HttpGet]
public ActionResult Index(){
HttpContext.Session.Remove("UserIn");
return View();
}
[HttpPost]
public ActionResult Index(string username, string password){
bool validUser = true;
if(validUser){
HttpContext.Session["UserIn"] = username;
}
return RedirectToAction("Dashboard");
}
[HttpGet]
public ActionResult Dashboard(){
if(HttpContext.Session["UserIn"] == null){
throw new Exception("No session found");
}
return View();
}
【问题讨论】:
-
能否在 2 动作中显示相关代码?您如何存储值和重定向以及如何读取值?
-
您能否在仪表板中添加检查会话对象的代码和登录页面中的验证块?
-
我添加了代码,修剪了一些不相关的代码。这几乎就是会话的使用方式。
-
抱歉,运行此代码对我有用。所以我猜这个问题出在你没有显示的代码的其他部分。您能否发布一个简短的代码示例来展示您正在谈论的问题?
-
在仪表板视图中,您如何检查会话对象(您提到它说“未找到会话”) - 另外,您是否在 IF () 块旁边的仪表板操作中放置了一个中断看看那个会话对象的值是什么?
标签: .net asp.net-mvc session