1

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

我的问题是刷新超时设置该值,因此如果您在上午 8 点登录,您的会话将保持刷新到 10 小时。

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

谢谢阅读!

4

2 回答 2

2

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

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

于 2013-10-09T18:54:17.140 回答
0
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;
}
于 2013-12-02T07:11:16.973 回答