14

いくつかの Ajax コンテンツが豊富なページを持つレガシー アプリケーション (従来の ASP と ASP.net の混合) があります。サイトのユーザーは、ページ上で一連のタスクを実行し、かなりの時間かかることが予想されます。 、15〜30分。

要件の 1 つは、サイトにログインしているユーザーが 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 つのページを提供するように...1 つは JavaScript を使用するユーザー用、もう 1 つは使用しないユーザー用です。

または、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 に答える