私は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);
}
ログイン後、2つのCookieがあることがわかります。
- ASPXAUTH(有効期限が「セッションの終了時」に設定されている場合(persistesがfalseの場合)または(30分後(persistesがtrueに設定されている場合)
- 有効期限が常に「セッションの終了時」であるASP.NET_SessionId
質問:問題は、TRUEを「persists」オプションに設定しても(これにより、ASPXAUTHの有効期限が30分後に設定されます-これは良いことです)、ブラウザを閉じて再度開いた後、Session["AdminId"]が常にnullになることです。最初に「persists」をtrueに設定して閉じてからブラウザウィンドウを再度開いたときに、セッション(Session["AdminId"]およびSession["AdminUsername"])がCookieからプルインされていることを確認するにはどうすればよいですか。ありがとう