简而言之,我们希望我们的会话能够持续一个工作日并在晚上超时 . 目前我在Session_Start中设置了一些简单的逻辑,将超时设置为剩余的分钟数,直到下午6点 .
我的问题是刷新时超时被设置回该值,所以如果你在早上8点登录,你的会话将保持刷新到10小时 .
是否有任何方法可以覆盖刷新会话的默认逻辑,只有在剩余少于X的情况下才将其设置为X?所以,如果它还剩下20分钟,我会把它恢复到20分钟,但另外一个人不管呢?
谢谢阅读!
您的超时仅在 Session_Start 上设置为global.asax,因此如果用户在上午8点登录,则超时将设置为10小时 . 如果他们在该时间范围内再次访问您的网站,他们的会话将延长10个小时,因为 Session_Start 中的逻辑不会再次触发 .
Session_Start
解决方案1可以提供基于this article . 基本上,您通过引用List添加每个新Session . 在下午6点,您可以遍历此列表并 Session.Abandon() 任何打开的会话 . 这样可以将所有超时逻辑保存在一个或两个文件中 .
Session.Abandon()
您还可以在 Page_Load() 中放置一个获取当前时间并调整 Session.Timeout 属性的方法 . 这是一个例子:
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; }
2 回答
您的超时仅在
Session_Start
上设置为global.asax,因此如果用户在上午8点登录,则超时将设置为10小时 . 如果他们在该时间范围内再次访问您的网站,他们的会话将延长10个小时,因为Session_Start
中的逻辑不会再次触发 .解决方案1可以提供基于this article . 基本上,您通过引用List添加每个新Session . 在下午6点,您可以遍历此列表并
Session.Abandon()
任何打开的会话 . 这样可以将所有超时逻辑保存在一个或两个文件中 .您还可以在
Page_Load()
中放置一个获取当前时间并调整Session.Timeout
属性的方法 . 这是一个例子:上面的代码将在服务器时间下午6点到期 . 如果有的话,尝试将其放在母版页上 .