简而言之,我们希望我们的会话能够持续一个工作日并在晚上超时。目前我在Session_Start中设置了一些简单的逻辑,将超时设置为剩余的分钟数,直到下午6点。
我的问题是刷新超时设置返回到该值,所以如果你在早上8点登录,你的会话将保持刷新到10小时。
有没有办法覆盖刷新会话的默认逻辑,只有在剩余少于X的情况下才将其设置为X?所以,如果剩下不到20分钟的时间,我会把它恢复到20分钟,但另外一个人呢?
感谢阅读!
答案 0 :(得分:2)
您的超时仅在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点到期。如果你有一个主页,请尝试将其放在母版页上。
答案 1 :(得分: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;
}