Я работаю над приложением MVC 5.Ниже приведен мой код в web.config для сеанса.
<sessionState mode="InProc" cookieless="AutoDetect" timeout="1" />
<pages enableSessionState="true">
<namespaces>
<add namespace="System.Web.Helpers"/>
<add namespace="System.Web.Mvc"/>
<add namespace="System.Web.Mvc.Ajax"/>
<add namespace="System.Web.Mvc.Html"/>
<add namespace="System.Web.Mvc.Routing"/>
<add namespace="System.Web.WebPages"/>
</namespaces>
</pages>
Когда пользователь входит в приложение, я сохраняю его имя пользователя в сеансе.
У меня есть следующий код дляАтрибут SessionTimeOutAttribute для проверки, является ли сеанс пустым, но HttpContext.Current.Session["userName"]
всегда равен нулю и заканчивается на странице входа в цикл.
public class SessionTimeOutAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
HttpContext ctx = HttpContext.Current;
if (HttpContext.Current.Session["userName"] ==null)
{
filterContext.Result = new RedirectResult("~/Session/Create");
return;
}
base.OnActionExecuting(filterContext);
}
}
Обновление: Я использую атрибут [AllowAnonymous]
при входе в систему.
[AllowAnonymous]
[HttpPost]
public ActionResult Create(UserModel user)
{
if (ModelState.IsValid){....}
Если вход успешен, я сохраняю имя пользователя в сеансе Session["userName"] = userAccount.Username;
Вот так я использую атрибут на контроллерах
[Authorize]
[SessionTimeOut]
public class TestController : Controller
{