首页 文章

以编程方式刷新ASP.NET MVC4应用程序中的会话超时

提问于
浏览
1

简而言之,我们希望我们的会话能够持续一个工作日并在晚上超时 . 目前我在Session_Start中设置了一些简单的逻辑,将超时设置为剩余的分钟数,直到下午6点 .

我的问题是刷新时超时被设置回该值,所以如果你在早上8点登录,你的会话将保持刷新到10小时 .

是否有任何方法可以覆盖刷新会话的默认逻辑,只有在剩余少于X的情况下才将其设置为X?所以,如果它还剩下20分钟,我会把它恢复到20分钟,但另外一个人不管呢?

谢谢阅读!

2 回答

  • 0

    您的超时仅在 Session_Start 上设置为global.asax,因此如果用户在上午8点登录,则超时将设置为10小时 . 如果他们在该时间范围内再次访问您的网站,他们的会话将延长10个小时,因为 Session_Start 中的逻辑不会再次触发 .

    解决方案1可以提供基于this article . 基本上,您通过引用List添加每个新Session . 在下午6点,您可以遍历此列表并 Session.Abandon() 任何打开的会话 . 这样可以将所有超时逻辑保存在一个或两个文件中 .

    您还可以在 Page_Load() 中放置一个获取当前时间并调整 Session.Timeout 属性的方法 . 这是一个例子:

    protected void Page_Load(object sender, EventArgs e)
    {
        int timeout = 20;
    
        var hr = DateTime.Now.Hour;
        var min = DateTime.Now.Minute;
        var time = (hr * 60) + min;
    
        //1080 minutes = 6pm
    
        if (time <= 1080)
        {
            timeout = 1080 - time;
        }
    
        if (time > 1080)
        {
            //1440 minutes = midnight
            timeout = (1440 - time) + 1080;
        }
    
        Session.Timeout = timeout;
    
    }
    

    上面的代码将在服务器时间下午6点到期 . 如果有的话,尝试将其放在母版页上 .

  • 2
    protected void Page_Load(object sender, EventArgs e)
    {
      int timeout = 20;
      var hour = DataTime.Now.Hour;
      var minutes =DataTime.Now.Minutes;
      var time = (hour * 60) + minutes;
      if (time <= 2000)
      {
        timeout = 2000 - time;
      }
      if (time > 2000)
      {
        //3000 minutes = midnight
        timeout = (3000 - time) + 2000;
      }
      Session.Timeout = timeout;
    }
    

相关问题