重定向到另一个页面时主页的会话超时

时间:2013-12-04 03:49:23

标签: javascript asp.net session master-pages

我使用

在母版页中使用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必须以前一个值开始,而不是从初始值开始。

提前致谢。

1 个答案:

答案 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以获取有关会话的更详细说明。