也许我想得太多了,但我需要做的是看看从开始 session 时间(1 分钟)减去当前时间的时间差是多少。
<script type="text/javascript">
var mySessionTimer;
@functions {
public int PopupShowDelay
{
get {
DateTime currentSetTimeout = DateTime.Now.AddMinutes(HttpContext.Current.Session.Timeout);
DateTime currentServerTime = DateTime.Now;
TimeSpan duration = (currentServerTime.Subtract(currentSetTimeout));
return 60000 * (int)duration.TotalMinutes;
}
}
}
function callJSSessionTimer() {
var sessionTimeoutWarning = @PopupShowDelay;
var sTimeout = parseInt(sessionTimeoutWarning);
mySessionTimer = setTimeout('SessionEnd()', sTimeout);
}
function SessionEnd() {
clearTimeout(mySessionTimer);
window.location = "/Account/sessionover";
}
@if (userInfo != null)
{
if (userInfo.chosenAMT == "True")
{
@:callJSSessionTimer();
} else
{
@:clearTimeout(mySessionTimer);
}
} else {
@:clearTimeout(mySessionTimer);
}
</script>
因此,duration 的值为 -00:01:00,这在技术上是正确的,因为 currentSetTimeout 为 1 分钟 并获取今天的日期/时间,从 currentSetTimeout 中减去该日期/时间后一分钟。
因此,所有这一切的重点是跟踪用户从一个页面跳转到另一个页面时的剩余 session 时间。目前,当用户转到另一个页面时,它会重置时间并且不准确。
我怎样才能按照我需要的方式做到这一点?
最佳答案
当用户在 session 期间转到另一个页面时,您可以使用 html5 session 存储来维护该值:
if (sessionStorage.popupShowDelay) {
sessionStorage.popupShowDelay = Number(sessionStorage.clickcount);
} else {
DateTime currentSetTimeout = DateTime.Now.AddMinutes(HttpContext.Current.Session.Timeout);
DateTime currentServerTime = DateTime.Now;
TimeSpan duration = (currentServerTime.Subtract(currentSetTimeout));
sessionStorage.popupShowDelay = 60000 * (int)duration.TotalMinutes;
}
您可以在此处查看更多信息: https://www.w3schools.com/html/html5_webstorage.asp
关于javascript - ASP.net MVC session 超时持续时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45719224/