MVC3:C# 窗体身份验证和会话状态
本文关键字:会话状态 身份验证 窗体 MVC3 | 更新日期: 2023-09-27 18:33:35
我想知道在MVC中处理和实现会话超时的最佳方法。 我已经设置了我的应用程序,以便在用户进行身份验证时它可以处理"记住我"。 我还在Context.Session["myvar"];
中存储了一些变量
当我的会话已过期但身份验证 Cookie 尚未过期时,我遇到了问题。
我的第一个想法是在操作请求上检查会话统计信息;但这似乎是很多代码。有没有检查一次会话状态的好地方? 还有哪些其他方法可以处理会话超时? 我希望在会话超时时将用户重定向到登录页面。或者,如果用户仍处于登录状态,则重新加载会话变量。
有没有检查一次会话状态的好地方
当然,自定义授权属性看起来是一个好地方:
public class MyAuthorizeAttribute : AuthorizeAttribute
{
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
var authroized = base.AuthorizeCore(httpContext);
if (!authroized)
{
// the user is not authenticated or the forms authentication
// cookie has expired
return false;
}
// Now check the session:
var myvar = httpContext.Session["myvar"];
if (myvar == null)
{
// the session has expired
return false;
}
return true;
}
}
在global.asax中.cs您可以添加SessionStart处理程序
protected void Session_Start(object sender, EventArgs e)
{
if (this.Context.User != null && this.Context.User.Identity != null
&& this.Context.User.Identity.IsAuthenticated)
{
// Got user from authentication cookie (remember me).
// here you can either re-instantiate user in your application/session
// so he/she will be logged-in automatically (which is remember me functionality)
// The username is in this.Context.User.Identity.Name
// Or redirect user to login page if you need manual login
}
}