【问题标题】:Programmatically refreshing session timeout in ASP.NET MVC4 application在 ASP.NET MVC4 应用程序中以编程方式刷新会话超时
【发布时间】:2013-10-09 18:21:30
【问题描述】:

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

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

是否有任何方法可以覆盖刷新会话的默认逻辑,仅在剩余少于 X 的情况下将其设置为 X?因此,如果剩余时间不到 20 分钟,我会将其设置回 20 分钟,否则不要管它?

感谢阅读!

【问题讨论】:

  • 您似乎有滑动到期,并且想要绝对到期。我知道缓存项目很容易,但我不确定会话。我去看看。
  • 我也在看那个,但在某些时候我确实想扩展它。如果有人工作到很晚,我不希望他们的会话每 20 分钟过期一次。

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


【解决方案1】:

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

解决方案 1 可以提供基于 this article。基本上,您通过引用列表来添加每个新会话。下午 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 点使所有会话过期。如果有,请尝试将其放在母版页上。

【讨论】:

  • “好的,如果用户在上午 8 点登录,超时将设置为 10 小时。如果他们在该时间范围内再次访问您的网站,他们的会话将再延长 10 小时。”是的,这正是我想要避免的,这就是为什么我不想刷新它,除非它不到 20 分钟。感谢您的建议,我会研究一下
  • 不客气。我扩展了我的答案并添加了一些代码,检查一下。
  • 我正在使用 MVC,所以我没有 Page_Load 事件。最接近的事情是覆盖 System.Web.MVC.Controller 中的虚拟方法,但我不知道哪个刷新超时,希望有人这样做。
【解决方案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;
}

【讨论】:

    猜你喜欢
    • 2017-09-13
    • 1970-01-01
    • 2023-04-01
    • 2011-09-04
    • 2012-05-18
    • 1970-01-01
    • 1970-01-01
    • 2014-02-20
    • 2011-04-28
    相关资源
    最近更新 更多