回答
你可以尝试这样的事:
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
}
}
}
}
}
+1。您可能要检查,如果该请求是AJAX,然后设置内容型'“文/ JavaScript的”'和响应身体'“document.location =‘redirecturi’”'。 – jgauffin
@jgauffin我在MVC新的,这样你们可以给“document.location =“redirecturi”示例代码,怎么办? –
你试过现有授权过滤器?
授权过滤器与会话超时无关。 –
如上所述..尝试这个
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”是用于显示警报的Helper例程。其他一切都是样板代码。
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);
}
- 1. 在ASP.NET MVC中处理会话超时
- 2. 春季会话超时处理mvc
- 3. CAS是如何处理会话超时
- 4. 处理magento会话超时
- 5. 处理会话超时?
- 6. JSF,会话超时处理
- 7. 会话超时处理
- 8. 在ASP.NET MVC会话超时
- 9. 如何在asp.net中处理会话mvc
- 10. 在XrmServiceContext中处理会话超时
- 11. mvc会话超时
- 12. 在.NET MVC中处理会话超时Razor
- 13. 自定义会话超时处理
- 14. 如何增加MVC中的会话超时3
- 15. 处理会话超时丢失数据
- 16. 客户端处理会话超时
- 17. 处理会话变量超时
- 18. JSF会话超时&异常处理
- 19. Grails:处理HTTP会话超时事件
- 20. 处理会话超时而回发
- 21. 客户端处理会话超时
- 22. Spring 3.1:处理会话超时
- 23. ASP.NET MVC Global.asax中的会话超时处理
- 24. 在通用http处理程序中处理会话超时
- 25. 如何在Play Framework中处理会话超时或到期?
- 26. 如何处理会话超时在asp.net 3.5
- 27. 如何在JavaScript中处理MVC3中的会话超时?
- 28. 如何在会话超时后处理AJAX中的重定向?
- 29. 如何保持会话超时处理在Android应用程序
- 30. 如何在Angular 2/Java Spring Boot中处理会话超时
样板Visual Studio的MVC应用程序做到这一点。我建议看看它。 –
谢谢大卫。我无法找到它。任何链接将不胜感激。感谢 – vivek
我已经编辑你的问题,使之更重要的一点,并使用标签与自己相关。 – jgauffin