我用的ASP.NET,请问如何在页面上用户无操作10分钟后锁住当前浏览的页面,同时弹出一个登录页面。查了一些资料,一般都是介绍用Session,但是用session需要回传页面,并且用户在当前页面的操作会丢失(比如写一封邮件写了30分钟,一回传先前输入的内容就没了),现在肯定是想保存住用户已经输入的内容。请教如何实现以上功能,无论是服务端实现,还是客户端JS脚本。

解决方案 »

  1.   

    在页面内用 js 计时(简单的可以直接用var timer0 = setTimeout...),页面有任何操作时应当重置计时器(这一点比较麻烦,因为要充分监听各类可能的用户事件),计时器到时间后重定向页面或是用 HTML 元素覆盖页面就可以了。
      

  2.   

    不建议使用setTimeout,一旦setTimeout的地方太多,很难保证timeoutID的清除.这不是麻不麻烦的问题,而是会导致bug。
    如果真的考虑要用setTimeout,则在setTimeout之前一定要把上一次的timeout clear掉。
    至于保存用户数据,像邮件这种多内容的,可以定时为用户保存草稿。
      

  3.   

    2楼既然不建议settimeout,那么一般现在论坛网站上都使用的是什么样的方法?
      

  4.   

    以上是我之前做测试用的代码,你稍微改下就可以用了            var Linson={};
                Linson.sessionTracking={};
                Linson.sessionTracking.sessionExpiry=1;
                Linson.sessionTracking.sessionExpiryCountdown=60;
                Linson.sessionTracking.title="Session Tracking Test";
                Linson.sessionTracking.noticeText1="Your session will expire in ";
                Linson.sessionTracking.noticeText2=" seconds";
                Linson.sessionTracking.noticeText3="Please press OK to continue with your session. ";
                Linson.sessionTracking.expiredText="Sorry, your session has expired!";
                $(document).ready(function(){Linson.startSessionTracking();});
                window.onbeforeunload = function() {
                    if (Linson.sessionTracking) {
                        Linson.sessionTracking.sessionExpiry = 0;
                    }
                }
                Linson.startSessionTracking = function() {
                    if (Linson.sessionTracking && parseInt(Linson.sessionTracking.sessionExpiry) > 0) {
                    setTimeout("Linson.launchSessionNotice();", ((parseInt(Linson.sessionTracking.sessionExpiry) * 60) * 1000));
                    }
                }            $(window).resize(function() {
                    if ($('#dimmer').length > 0) {
                        $('#dimmer').css('width', ($(document).width()) + 'px');
                        $('#dimmer').css('height', ($(document).height()) + 'px');
                    }
                });            Linson.launchSessionNotice = function() {
                    if (Linson.sessionTracking && parseInt(Linson.sessionTracking.sessionExpiry) > 0) {
                        if ($('#dimmer').length > 0) {
                            $('#dimmer').remove();
                            $('#sessionNoticeBox').remove();
                        }
                        $('body').append('<div id="dimmer"></div><div id="sessionNoticeBox"><span id="sessionNoticeText">' + Linson.sessionTracking.title + '<br/>' + Linson.sessionTracking.noticeText1 + '<span id="sessionNoticeCount">' + Linson.sessionTracking.sessionExpiryCountdown + '</span>' + Linson.sessionTracking.noticeText2 + '<br/>' + Linson.sessionTracking.noticeText3 + '</span><br/><br/><input id="sessionNoticeOK" type="button" value=" OK " /></div>');
                        $('#dimmer').show();
                        $('#sessionNoticeBox').show();
                        $('#dimmer').css('width', ($(document).width()) + 'px');
                        $('#dimmer').css('height', ($(document).height()) + 'px');
                        ......
                        window.focus();
                }