我试图确定给定的 ASP.NET 会话在超时之前还剩下多少时间。
如果没有现成的 time-to-timeout 值,我也可以从它的最后一次访问时间计算它(但我也没有找到这个)。知道怎么做吗?
我试图确定给定的 ASP.NET 会话在超时之前还剩下多少时间。
如果没有现成的 time-to-timeout 值,我也可以从它的最后一次访问时间计算它(但我也没有找到这个)。知道怎么做吗?
如果您在服务器上处理请求,那么超时刚刚被重置,所以剩下的 20 分钟(或任何您配置的时间)仍然存在。
如果您想要客户端警告,您将需要创建一些 JavaScript 代码,该代码将在“现在”大约 20 分钟后触发。请参阅 setTimeout 方法。
在请求页面 15 分钟后,我用它来显示警告。它会弹出一条警报,例如“您的会话将在 {HH:mm} 到期,请保存您的工作”。使用了确切的时间而不是“5 分钟内”,因为您永远不知道用户何时会看到该消息(他是否在警报触发后 10 分钟返回他的计算机?)。
我刚刚实施了一个像这里问的那样的解决方案,它似乎有效。我有一个MVC
应用程序,并且在我的 _Layout.chtml 页面中有此代码,但它可以asp.net
通过将其放置在我认为的母版页中来在应用程序中工作。我正在通过amplify.js
插件使用本地会话存储。我使用本地会话存储,因为正如 Grieves 先生所说,可能存在用户以一种不会导致页面刷新或重定向但仍会重置服务器上的会话超时的方式访问应用程序的情况。
$(document).ready(function () {
var sessionTimeout = '@(Session.Timeout)'; //from server at startup
amplify.store.sessionStorage("sessionTimeout", sessionTimeout);
amplify.store.sessionStorage("timeLeft", sessionTimeout);
setInterval(checkSession, 60000); // run checkSession this every 1 minute
function checkSession() {
var timeLeft = amplify.store.sessionStorage("timeLeft");
timeLeft--; // decrement by 1 minute
amplify.store.sessionStorage("timeLeft", timeLeft);
if (timeLeft <= 10) {
alert("You have " + timeLeft + " minutes before session timeout. ");
}
}
});
然后在用户从不导致页面刷新但仍然访问服务器从而导致会话重置的页面中,我将其放在按钮单击事件上:
$('#MyButton').click(function (e) {
//Some Code that causes session reset but not page refresh here
amplify.store.sessionStorage("sessionTimeout", 60); //default session timeout
amplify.store.sessionStorage("timeLeft", 60);
});
使用本地会话存储允许我的 _Layout.chtml 代码看到会话已在此处重置,即使页面从未刷新或重定向。
对于多页解决方案,可以将最后一次请求时间保存在 cookie 中,而 javascript 可以考虑这个最后一次访问时间来处理警告消息或注销操作。
您可以在几分钟内从以下位置获取超时:
Session.Timeout
这还不足以提供信息吗,因为每次请求都会重置超时?不知道你想如何在没有请求的情况下显示这个?
无论如何,最好的方法是在每个请求上设置一些具有最后访问时间的 Session 变量。那应该提供远程信息。