会话超时刷新元标记重置.NET

时间:2019-02-11 11:39:19

标签: c# asp.net .net asp.net-mvc

我想在会话结束时显示一条消息,或重定向到.net Web应用程序上的登录页面。

我尝试使用Session_End global.asax事件,但是当该事件触发时,上下文已关闭,因此我无法重定向到任何页面。

我也尝试发送刷新元标记,但是即使用户在页面上导航,它也会刷新页面,我的意思是,刷新标记永远不会更新。

有没有一种方法可以做到这一点?你能帮我吗?

谢谢。

2 个答案:

答案 0 :(得分:2)

您需要JS定期(例如使用setTimeout每分钟轮询服务器)询问am I still logged in?。如果它得到false作为响应,则您的JS可以执行您想做的任何事情(显示消息,重定向到登录页面等)。

服务器端的实现将类似于

[HttpGet]
[AllowAnonymous]
[DoNotExtendAuthentication]
public ActionResult IsAuthenticated(string url)
{
    var isAuthenticated = HttpContext?.User?.Identity?.IsAuthenticated ?? false;
     return Json(isAuthenticated); // change this line to whatever shape of JSON you want
}

public class DoNotExtendAuthenticationAttribute : ActionFilterAttribute
{
    public override void OnResultExecuted(ResultExecutedContext filterContext)
    {
        filterContext.HttpContext.Response.Cookies.Remove(
            FormsAuthentication.FormsCookieName);
    }
}

DoNotExtendAuthenticationAttribute是有效禁用表单身份验证的滑动过期逻辑的必要条件。

对于路由,请确保使用SessionlessHandler,以免其不断扩展Session

答案 1 :(得分:0)

您是否可以尝试使用 ScriptManager 添加 Timer 事件,并使用计时器 tick事件来检查状态? 如果会话具有价值,那么如果没有给他们消息或您想要的内容,请继续。