简而言之,我们希望我们的会话持续一个工作日并在晚上暂停。目前,我在 Session_Start 中设置了一些简单的逻辑,将超时设置为下午 6 点之前的分钟数。
我的问题是刷新超时设置回该值,因此如果您在上午 8 点登录,您的会话将保持刷新到 10 小时。
是否有任何方法可以覆盖刷新会话的默认逻辑,仅在剩余少于 X 的情况下将其设置为 X?因此,如果剩余时间不到 20 分钟,我会将其设置回 20 分钟,否则不要管它?
谢谢阅读!
简而言之,我们希望我们的会话持续一个工作日并在晚上暂停。目前,我在 Session_Start 中设置了一些简单的逻辑,将超时设置为下午 6 点之前的分钟数。
我的问题是刷新超时设置回该值,因此如果您在上午 8 点登录,您的会话将保持刷新到 10 小时。
是否有任何方法可以覆盖刷新会话的默认逻辑,仅在剩余少于 X 的情况下将其设置为 X?因此,如果剩余时间不到 20 分钟,我会将其设置回 20 分钟,否则不要管它?
谢谢阅读!
您的超时设置在 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 点使所有会话过期。如果有,请尝试将其放在母版页上。
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;
}