首页 > 解决方案 > Session Timeout 通过jquery全局绑定函数

问题描述

我在 asp.net 核心中有一个操作方法,它返回会话是否已过期。我希望该功能每 1 小时运行一次。但是我怎样才能永久绑定它呢?

如果我将它绑定在特定页面上,它将不起作用,因为用户可能会导航到其他页面。

我尝试将它绑定到窗口,但这也不起作用。在窗口加载时绑定它不起作用。

public IActionResult IsSessionActive()
    {
    ResponseModel response = new ResponseModel();
    if (HttpContext.Session.GetInt32("CompanyId") == null)
    {
     response.Data = false;
     response.isError = true;
     response.Message = loc["SessionTimedOut"].Value;
    } 
    else
     {
      response.Data = false;
     }
       return Json(response);
    }

   window.setInterval(IsSessionActive(), 3600000); // jquery code

IsSessionActive 函数应该通过 jquery 全局绑定到 Web 应用程序,并在每 1 小时后运行一次。

标签: jqueryasp.net-core

解决方案


通常,您的共享文件夹中有一个“布局”视图,其中有页脚和菜单等。

你可以把这种逻辑放在那里。

它位于 Views > Shared > _LayoutPage.cshtml 或类似名称中。

尝试在该视图中执行您的脚本。

我不得不面对类似的事情,也许你可以试试这个,看看这是否适合你:

  • 登录时创建一个会话变量。该变量的值应该是实际日期和时间 (DateTime.Now) 加上一小时(如果会话已过期,您需要再次验证)。
  • 在您的母版页中,创建一个启动 ajax 请求的 SetInverval 函数(如您所见,每五分钟左右)以查看实际日期和时间是否小于您的会话变量(查看您是否需要验证您的会话) . 如果日期和时间大于您的会话变量,那么是时候再次检查您的会话是否仍然有效。
  • 如果是,请重置您的会话变量时间并重复该过程,如果不是,请注销用户。

推荐阅读