我的 MVC 应用程序使用 FormsAuthentication 登录。
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public ActionResult Login(FiNext.Models.User user)
{
try
{
using (HttpClient httpClient = new HttpClient())
{
var task = httpClient.PostAsJsonAsync<FiNext.Models.User>(String.Concat(ServiceUri.ApiUrl,"/Test/Validate"), user).Result;
FormsAuthentication.SetAuthCookie(user.Name, false);
SessionHelpers.UserId = user.Id;
return RedirectToAction("Create");
}
}
它的会话时间为 1 分钟(在 web.config 中),一旦调用会话超时,我将在 Global.asax 的 session_end 事件中清除会话。
protected void Session_End(object sender, EventArgs e)
{
Session.Clear();
Session.Abandon();
}
现在,当我使用页面上的正常注销按钮注销时,该页面会被注销。
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult LogOff()
{
try
{
FormsAuthentication.SignOut();
return RedirectToAction("Home", "User");
}
catch (Exception ex)
{
throw ex;
}
}
现在我点击了这个应用程序的任何 url(比如“ http://abcd.com/User/UserList ”)它被重定向到登录页面,因为我们已经注销并重定向到主页。这是所需的功能并且工作正常。
但问题是当会话超时并且 session_end 事件被触发时。现在当我点击这个应用程序的任何 url(比如“ http://abcd.com/User/UserList ”)时,我能够获取数据(这不应该发生)。
那么如何在 session_end 被触发时从表单身份验证中退出。我在 Global.asax 的 session_end 事件中尝试了这个:
protected void Session_End(object sender, EventArgs e)
{
FormsAuthentication.SignOut();
Session.Clear();
Session.Abandon();
}
但它给出了“对象引用未设置为对象的实例”。例外。