Я работаю над пользовательской страницей входа в mvc.net. Я проверяю логины так:. Вопрос об аутентификации форм.
public bool Login(string login, string password, bool persistent)
{
var loginEntity = this.AdminRepository.GetLogin(login, password);
if (loginEntity != null)
{
FormsAuthentication.SetAuthCookie(login, persistent);
HttpContext.Current.Session["AdminId"] = loginEntity.AdminId;
HttpContext.Current.Session["AdminUsername"] = loginEntity.Username;
return true;
}
тогда я украсит любой контроллер, который должен доступ администратора с помощью атрибута фильтра:
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
var ctx = HttpContext.Current;
// check if session is supported
if (ctx.Session != null)
{
var redirectTargetDictionary = new RouteValueDictionary();
// check if a new session id was generated
if (ctx.Session.IsNewSession)
{
// If it says it is a new session, but an existing cookie exists, then it must
// have timed out
string sessionCookie = ctx.Request.Headers["Cookie"];
if (((null != sessionCookie) && (sessionCookie.IndexOf("ASP.NET_SessionId") >= 0)) || null == sessionCookie)
{
redirectTargetDictionary = new RouteValueDictionary();
redirectTargetDictionary.Add("area", "Admin");
redirectTargetDictionary.Add("action", "LogOn");
redirectTargetDictionary.Add("controller", "Home");
filterContext.Result = new RedirectToRouteResult(redirectTargetDictionary);
}
} else if (SessionContext.AdminId == null) {
redirectTargetDictionary = new RouteValueDictionary();
redirectTargetDictionary.Add("area", "Admin");
redirectTargetDictionary.Add("action", "LogOn");
redirectTargetDictionary.Add("controller", "Home");
filterContext.Result = new RedirectToRouteResult(redirectTargetDictionary);
}
}
base.OnActionExecuting(filterContext);
}
я вижу, что после входа в меня два печенья:
- ASPXAUTH (с датой истечения срока действия - «В конце сеанса» (когда сохраняется недействительно) ИЛИ (30 мин. От сейчас (когда для persists установлено значение true)
- и ASP.NET_SessionId, которые время истечения срока действия всегда «В конце сессии»
Вопрос: Проблема заключается в том, что даже если я установить значение TRUE для «сохраняется» вариант (который устанавливает время истечения ASPXAUTH 30 мин., Что хорошо) моя сессия [«AdminId»] всегда имеет значение null после закрытия и повторного открытия браузера. Как я могу убедиться, что мои сеансы (Session ["AdminId"] и Session ["AdminUsername"]) вытащили из файла cookie, когда я изначально установил «persists» в true и close, а затем снова откроет окно browswer. thanks
Упорное параметр работает, установив Истекает свойство куки, если установлено верно. То, что вы установили, истекает в вашем web.config. Вы пробовали проверять содержимое cookie с помощью т. Е. Скрипач, чтобы узнать, установлено ли истечение срока действия или нет? –