14

我们有一个遗留应用程序(经典 ASP 和 ASP.net 的混合),它有一些 Ajax 内容丰富的页面。期望站点的用户在页面上执行一组可以跨越相当长的时间的任务,15-30 分钟。

其中一项要求是登录网站的用户在 15 分钟不活动后自动注销。这目前是通过使用元标记来实现的,用于在页面处于非活动状态 15 分钟后将用户重定向到注销页面。

<meta name='Refresh' http-equiv="Refresh" content="900;URL=/someurl/logout.asp">

我们遇到的问题是浏览器认为页面上没有任何活动,尽管与服务器进行了许多 AJAX 交互。因此,在浏览器认为不活动的 15 分钟后,用户会自动注销,即使他们正在做某事。

受此留言板帖子的启发,我们尝试像这样使用 javascript(JQuery) 来解决烦恼

下面将是一个事件处理程序,例如单击页面上的保存等。为简单起见,这里是将刷新时间修改为 5 秒的页面加载

$(document).ready(function() {
    var selector = 'meta[name=Refresh]';
    var content = $(selector).attr("content"); //"900;URL=/someurl/logout.asp"
    $(selector).attr("content", "5;URL=/someurl/logout.asp"); 
});

意图是(重新)设置元标记内容,页面刷新计时器将被重置。不幸的是,这似乎不起作用(在 IE 中)。

由于这是一个遗留应用程序,一些决定,即使用元标记等。问题是,有没有办法让元标记刷新与 Ajax 应用程序和平共存?我做错了什么,有没有办法解决这个问题?

4

2 回答 2

7

假设您正在使用 jQuery,这样的东西可能会起作用。我还没有测试过,也不知道浏览器是否会读取文档头中 noscript 元素中的元标记。

用这个替换你的元标记:

<script type="text/javascript">
    window.onload = function(){
        var timer = null,
            time=1000*60*15, // 15 minutes
            checker = function(){
                if(timer){clearTimeout(timer);} // cancels the countdown.
                timer=setTimeout(function() { 
                    document.location="/someurl/logout.asp";
                },time); // reinitiates the countdown.
            };
        checker(); // initiates the countdown.
        // requires jQuery... (you could roll your own jQueryless version pretty easily though)
        if(window.jQuery){
            // bind the checker function to user events.
            jQuery(document).bind("mousemove keypress click", checker);
        }
    };
</script>
<noscript>
    <meta name="Refresh" http-equiv="Refresh" content="900;URL=/someurl/logout.asp">
</noscript>

肯定有更好的方法来做到这一点。就像提供 2 个页面......一个用于使用 javascript 的用户,一个用于没有 javascript 的用户。

或者只是为没有 javascript 的人禁用该应用程序。:o)

根据此页面进行编辑: http ://www.google.com/support/forum/p/Webmasters/thread?tid=25c023fea4ea60a4&hl= en 元刷新应该在 noscript 元素内工作。

于 2010-02-05T21:26:06.457 回答
0

我认为没有办法阻止元刷新。您可以更改元标记,但浏览器已经决定将在 15 分钟内刷新;没有 API 可以阻止它。

如果您无法停止刷新或使用 JavaScript 进行重定向,也许您可​​以控制损坏:

$(window).unload(function() { 
  // Insert code here 
  // to save the user's work.
  alert('Sorry, you have to log out now.')
}); 
于 2010-02-05T20:40:15.140 回答