我使用
在母版页中使用Session
值
sessionTimeout = <%= Session.Timeout %> ;
SessionTimeout = 20
我使用此功能来减少会话值。
sessionTimeout = <%= Session.Timeout %> ;
now = new Date();
newtime = now.setMinutes(now.getMinutes() + parseInt(sessionTimeout));
function Session_Expiry(session1) {
now = new Date();
diff = newtime - now;
days = Math.floor(diff / (1000 * 60 * 60 * 24));
hours = Math.floor(diff / (1000 * 60 * 60));
mins = Math.floor(diff / (1000 * 60));
secs = Math.floor(diff / 1000);
mm = mins - hours * 60;
ss = secs - mins * 60;
if(mm<10 && mm>=0)
{
mme='0'+mm;
}
else
{
mme=mm;
}
if(ss<10 && ss>=0)
{
sse='0'+ss;
}
else
{
sse=ss;
}
sessionresult ='Session will expiry in '+ mme + ':' + sse + ' Secs';
document.getElementById(session1).innerHTML = sessionresult;
if(secs<=0)
{
window.location.href='Login.aspx';
}
setTimeout('Session_Expiry("'+session1+'");','1000');
return true;
}
并且我通过使用java脚本减少了这个值。它工作正常。但当我redirect
到另一个页面时,session
值正在从20开始。我怎么能抵制这个,我想要输出,当我重定向到master page
的另一个内容页面时,会话value必须以前一个值开始,而不是从初始值开始。
提前致谢。
答案 0 :(得分:1)
除非我误解了您的问题,否则我认为您不了解asp.net中Sessions的概念。当会话处于活动状态时(即用户首次登录您的网站),IIS将在服务器上维护一个会话,如果在定义的时间段内没有收到对该用户的更多请求,则该会话将过期(默认为20分钟) )。当您重定向到另一个页面时,会话超时将再次重置为20分钟。
这有一个非常实际和合乎逻辑的目的,想象一下登录网站就知道无论你使用多少网站,你都会被迫每20分钟登录一次。
上面代码的另一个问题是,当您重新加载页面时,您正在读取相同的会话超时值(从未更改过)。
我真的建议像上面那样“滚动你自己的”会话管理器,asp.net已经内置了所有这些。
你应该使用类似的东西:
<authentication mode="Forms">
<forms loginUrl="~/Pages/Account/Login.aspx" timeout="40" slidingExpiration="true" />
</authentication>
<authorization>
<deny users="?"/>
</authorization>
<sessionState timeout="20" cookieless="false"></sessionState>
请查看此question以获取解释。
另请查看here以获取有关会话的更详细说明。