Asp.net mvc MVC 3中如何处理会话超时
我经常遇到会议超时的问题Asp.net mvc MVC 3中如何处理会话超时,asp.net-mvc,session-timeout,action-filter,Asp.net Mvc,Session Timeout,Action Filter,我经常遇到会议超时的问题 我想编写一个可在每个控制器上使用的通用筛选器,筛选器应将用户重定向到登录位置,并在登录后返回到用户上次发送请求的位置。您可以尝试以下操作: public class SessionExpireAttribute : ActionFilterAttribute { public override void OnActionExecuted(ActionExecutedContext filterContext) { base.OnActionExe
我想编写一个可在每个控制器上使用的通用筛选器,筛选器应将用户重定向到登录位置,并在登录后返回到用户上次发送请求的位置。您可以尝试以下操作:
public class SessionExpireAttribute : ActionFilterAttribute {
public override void OnActionExecuted(ActionExecutedContext filterContext) {
base.OnActionExecuted(filterContext);
}
public override void OnActionExecuting(ActionExecutingContext filterContext) {
if (filterContext.HttpContext.Session != null) {
if (filterContext.HttpContext.Session.IsNewSession) {
var sessionCookie = filterContext.HttpContext.Request.Headers["Cookie"];
if ((sessionCookie != null) && (sessionCookie.IndexOf("ASP.NET_SessionId") >= 0)) {
// redirect to login
}
}
}
}
}
您是否尝试过现有的授权筛选器?如上所述。。试试这个
public class SessionExpireAttribute : ActionFilterAttribute {
public override void OnActionExecuting(ActionExecutingContext filterContext) {
if (filterContext.HttpContext.Session != null) {
if (filterContext.HttpContext.Session.IsNewSession) {
filterContext.Result = new RedirectResult("/");//redirect to home page
}
}
}
}
然后将此过滤器应用于操作或控制器
[SessionExpire]
这里的内容远远超出了人们的想象。这里有一个更完整的OnActionExecuting,它使用了上面已经讨论过的相同概念,但添加了更多。有关更多信息,请参阅内联注释。正在调用的“InitializeSession”是一个自定义函数,它创建会话状态中运行站点所需的基本属性。“AlertWarning”是用于显示警报的辅助程序例程。其他一切都是样板代码
protected override void OnActionExecuting(ActionExecutingContext filterContext)
{
var bRequiresAuthorization =
(filterContext.ActionDescriptor.GetCustomAttributes(typeof(AuthorizeAttribute), false).Length > 0) ||
(filterContext.Controller.GetType().GetCustomAttributes(typeof(AuthorizeAttribute), false).Length > 0);
if (filterContext.HttpContext.Session != null)
{
if (filterContext.HttpContext.Session.IsNewSession)
{
//New session. Initialize Session State
bool b = InitializeSession(null);
if (bRequiresAuthorization )
{
//Action requested requires authorized access. User needs to authenticate this
//new session first, so redirect to login
string cookie = filterContext.HttpContext.Request.Headers["Cookie"];
if ( (cookie != null) && (cookie.IndexOf("_SessionId=") >= 0) )
{
//An expired session cookie still resides on this PC, so first alert user that session is expired
AlertWarning("Session timed out due to inactivity. Please log in again.");
}
filterContext.Result = RedirectToAction("LogOut", "Authentication");
}
}
}
base.OnActionExecuting(filterContext);
}
样板VisualStudioMVC应用程序就是这样做的。我建议你看看。谢谢大卫。我找不到。任何链接都将不胜感激。谢谢。我已经编辑了你的问题,使之更切题,并使用了相关的标签。+1。您可能需要检查请求是否为ajax,然后将内容类型设置为“text/javascript”,并将响应主体设置为“document.location='redirecturi'”@jgauffin我是mvc新手,因此您可以给出“document.location='redirecturi”的示例代码,如何操作?授权筛选器与会话超时无关。