3

構築しているWebアプリケーションのアイドルタイムアウトを実装したいと思います。私は以前 、codeplexのAsynchronousSessionAuditorを使用してこれを達成しました。これは、基本的に、一定のポーリングによってformsauthenticationとセッションCookieのタイムアウトを検索します。

ただし、クライアント側のイベントを尊重しないという欠点があり、ログオフするタイミングを決定するために最後のポストバックのみを検索します。

erichyndsのjqueryプラグイン jquery-idle-timeout-pluginは、クライアント側イベントのこの問題を解決しますが、ユーザーが他のタブでアクティブであることを認識できないという別の欠点があります。

jquery-idle-timeout-pluginでTABBEDブラウジングの問題をすでに修正している人はいますか?または、Webアプリケーションのアプリケーションタイムアウトのより良いアプローチはありますか(このWebアプリはasp.net f / wを使用して構築されています)

4

2 に答える 2

2

私があなたの質問を正しく理解している場合、現在のウィンドウ/タブの外のアクティビティに対してjavascriptでトリガーされるイベントがないため、それは不可能です。

ブラウザごとにWebサイトに対応するアドオンがない限り、ブラウザ内のすべてのアクティビティを監視できますが、これは実際的なアプローチではありません。

于 2013-03-20T22:21:02.937 に答える
0

さて、あなたはそれを手でコーディングしなければならないでしょう、それは本当に難しいことではありません。onfocus関数とonblur関数を使用して、次のようなことを行うことができます。

$(function() {
    window.isActive = true;
    $(window).focus(function() { this.isActive = true; });
    $(window).blur(function() { this.isActive = false; });
    showIsActive();
});

function showIsActive()
{
    console.log(window.isActive)
    window.setTimeout("showIsActive()", 2000);
}

function doWork()
{
    if (!window.isActive) { /* Check for idle time */}
}

少し検索すると、この質問のさまざまなものがすでに質問され、回答されていることがわかります。おそらく、言及したプラグインの1つを使用して実装できるソリューションを見つけることができます。

試してください: タブがアクティブな場合にのみsetTimeoutを実行するか、ブラウザ/タブがアクティブどうかを確認する方法

編集->追加:

または、別のアプローチを試してみます。ハッシュを使用してCookieを作成し、ウィンドウがアクティブになるたびに更新されるタイムスタンプを使用してそのハッシュをDBに保存できます(5秒ごとにチェックできますが、集中的なリクエスト
ではありません)。次に、前に別のチェックを実行します(ただし、同じリクエスト)最後のタイムスタンプから経過した時間を確認し、必要に応じてログアウトします。
時間が経過してもすぐにログアウトすることはありませんが、サイトを再度開くか、タブ/ウィンドウにフォーカスしてサイトにアクセスしようとするとログアウトします。

于 2013-03-20T22:29:30.127 に答える