【发布时间】:2014-05-02 08:46:45
【问题描述】:
我有 Web 应用程序 ASP.NET MVC 4。当用户登录到应用程序时,我将他的信息作为 UserCtx 类的对象写入会话。之前,我创建了一个 cookie:
public ActionResult executeLogin(LoginModel model)
{
if (ModelState.IsValid)
{
FormsAuthentication.SetAuthCookie(model.UserName, false);
UserCtx userCtx = ds.SetUserCtx(model.UserName, model.Password);
Session["UserCtx"] = userCtx;
return Redirect(returnUrl ?? "/Offer");
}
else
{
return View("Index");
}
}
为了更容易操作会话中持有的对象,我创建了一个静态属性,我在应用程序中使用它:
public class UserCtx
{
public static UserCtx UserLogged
{
get
{
UserCtx userCtx = ((UserCtx)HttpContext.Current.Session["UserCtx"]);
return userCtx;
}
}
}
例如我经常在视图中使用这个属性:
@if (UserCtx.UserLogged.ADMIN)
{
@Html.Partial("_gvNetLogPartial")
}
然而,一段时间后,这个变量为空,但我真的不知道为什么会这样。此外,我在 web.config 中设置了超时:
<sessionState timeout="30"/>
另外,我在每个控制器上都有过滤器来检查会话的值。这是过滤器:
public class CheckSessionFilter : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
if (filterContext.RequestContext.HttpContext.Session["UserCtx"] == null)
{
FormsAuthentication.RedirectToLoginPage();
}
}
}
这个错误可能是因为我使用了静态属性?
【问题讨论】:
标签: asp.net-mvc-4 session session-variables session-state session-timeout