私の会社の新しいバックエンド システムに取り組んでいます。彼らの要求の 1 つは、ウィンドウをロックダウンし、ユーザーが長時間アイドル状態のままにしておくとログイン画面に送られるようにすることです。
クリック、マウスの動き、キーアップにリスナーを追加することで JavaScript でこれを行うと思いますが、他のスクリプトを台無しにすることを心配しています。
助言がありますか?
私の会社の新しいバックエンド システムに取り組んでいます。彼らの要求の 1 つは、ウィンドウをロックダウンし、ユーザーが長時間アイドル状態のままにしておくとログイン画面に送られるようにすることです。
クリック、マウスの動き、キーアップにリスナーを追加することで JavaScript でこれを行うと思いますが、他のスクリプトを台無しにすることを心配しています。
助言がありますか?
ユーザーが長い間ページを変更しない場合は、ログアウトするようにできます。それが、Angel Learning Courseware システムが行っているように見えることです。
ただし、直面するもう 1 つの問題は、一部のユーザーが JavaScript を無効にしていることです。
ページにコードを配置できる場合は、次の 2 つがあります。
サーバーにしかコードを配置できない場合:
メタ リフレッシュとサーバー技術を一緒に使用できます。更新されたページには、「セッションの有効期限が近づいています。ここをクリックして戻り、30 秒以内に作業を続行してください」というメッセージが表示されます。
彼らがクリックしたボタンは、サーバーのセッションをリセットし、ページバック機能を実行するため、(ほとんどのブラウザーで) 彼らが持っていたデータはそのまま残ります。更新ページでは JavaScript が必要ですが、元のページでは必要ありません。メタ更新のみです。ただし、Javascript アクティビティ トラッキングが最適です。
-アダム
ページの読み込みイベントでは、setTimeout を使用して、ページを更新しないとログアウトされることをユーザーに警告する関数を起動できます。
5 分間のセッション タイムアウトを使用すると、4 分後に警告を表示できます。
setTimeout(timeoutWarning, 240000);
function timeoutWarning() {
if(confirm('You have been idle for a while. Would you like to remain logged in?'))
window.location.refresh();
}
まず、これを有効にするには、このアイドル時間の終わりにユーザーがサーバーからログアウトされていることを確認する必要があります。そうしないと、クライアント側で何をしても効果がありません。ログイン ページに送信すると、[戻る] ボタンをクリックするだけで済みます。
次に、これを行う従来の方法は、「メタ リフレッシュ」タグを使用することです。これをページに追加します。
<meta http-equiv="refresh" content="900;url=http://example.com/login"/>
15 分 (900 秒) 後にログイン ページに送信されます。これにより、ページ上で何かをしている場合でも、そこに送信されます。アクティビティは検出されません。ブラウザでページが表示されている時間を把握しているだけです。人々は 1 ページの入力に 15 分もかからないため、通常はこれで十分です (stackoverflow.com は顕著な例外だと思います)。
ページ上のアクティビティを本当に検出する必要がある場合は、最初の直感が正しいと思います。イベント ハンドラーをいくつかのものに追加する必要があります。検証などのために他のスクリプトをいじることが心配な場合は、インラインではなくプログラムでイベント ハンドラーを追加することを検討する必要があります。つまり、使用する代わりに
<input type="text" onClick="doSomething;">
オブジェクト モデルに直接アクセスする
Mozilla way: element.addEventListener('click' ...)
Microsoft way: element.attachEvent('onclick' ...)
そして、イベントを受信した後にイベントを渡すようにしてください。これにより、既存のコードは、実行すべきこと (検証?) を引き続き実行します。
http://www.quirksmode.org/js/introevents.htmlには、これを行う方法に関する適切な記事があります。
--
bmb