Đối với mục đích đăng xuất, sau khi hết thời gian phiên, tôi sử dụng đoạn mã này
if (context.Session.IsNewSession)
{
string sessionCookie = context.Request.Headers["Cookie"];
if ((null != sessionCookie) && (sessionCookie.IndexOf("ASP.NET_SessionId") >= 0))
{
var controller = (BaseController)filterContext.Controller;
var routeValueDictionary = new RouteValueDictionary(new { controller = "Account", action = "SessionLogOff", area = string.Empty });
filterContext.Result = new RedirectToRouteResult(routeValueDictionary);
}
}
Điều đó được triển khai trong OnActionExecuting dưới dạng ActionFilterAttribution.
Tôi đang sử dụng ASPNet Identity 2.2 và MVC 5.2.
Điều này hoạt động tốt, khi một phiên hết hạn và Phiên.IsNewSession là đúng.
Vấn đề của tôi là khi trình duyệt được khởi động lại, ứng dụng khởi động và người dùng đã tồn tại (cookie), Phiên.IsNewSession là đúng và người dùng đó đã đăng xuất trong hành động đầu tiên mà anh ta cố gắng thực hiện.