2

データベースへのアクセスに使用している Web サイトからログアウトするユーザーが絶対に必要です。ログアウトせずに単にブラウザを閉じた場合、システムはユーザー名を 1 時間ロックします。私はそれを実装しませんでした、それはそれが機能する方法です。

ユーザーがログアウトしたかどうかを何らかの方法で検出し、ログアウトしていない場合はブラウザーを閉じないようにする単純な C# プログラムを作成することを考えました。

1) Firefox API、または firefox.exe プロセスで Web サイトのコンテンツを読み取る他の方法はありますか?

2) ユーザーが「X」を押してブラウザを閉じたときに、firefox.exe プロセスの終了を中止することはできますか? (おそらくこれは契約破りの質問です)。

ヒントをいただければ幸いです。ありがとう!

4

5 に答える 5

10

認証を使用している場合は、すべてのユーザーにセッションが必要です。セッションは期限切れになるように構成できます。必要なのは、適切なセッションの期限切れイベントを処理することだけです。

ブラウザの終了イベントを処理するためのハックを探してはいけません - これは危険なパスです:

  • 誰もがそれを嫌うだろうし、新しいバージョンのブラウザーで作業したり、異なる OS で多くのブラウザーをサポートしたりするなど、信頼できるものにする可能性はありません。
  • これは Firefox Mozilla (サンプル) では機能する可能性がありますが、IE や Chrome では機能しない可能性があります
  • アプリケーションは OS によって強制終了される可能性があるため、ブラウザー イベントが発生する機会がなく、処理コードが機能しません。
于 2012-07-23T15:00:02.027 に答える
2

ユーザーが Firefox を閉じるのを止めることはできません。これは、コードで制御できない閉じ方がたくさんあるためです (例: taskmon からのプロセスの強制終了)。ただし、コード内の閉鎖イベント (window.onClose() イベント) を検出して、ログアウト プロセスを実行できます。

ただし、firefox (またはその他のブラウザー) が閉じられずに強制終了された場合、window.onClose() は機能しません。したがって、クライアントの動作に依存するよりも、サーバーでセッションを処理する方が適切です。

于 2012-07-23T15:03:25.943 に答える
2

できることは、javascript を使用してブラウザがサイトを閉じたり離れたりすることを検出し、それらのインスタンスでメソッドを起動するか、ログアウトする Web サービスをヒットすることです。非常に速く、非常にシンプルで、ブラウザ間で動作します。

于 2012-07-23T15:08:20.423 に答える
1

ユーザーが正当な方法でプログラムを閉じるのを防ぐことはできません。これは明らかなセキュリティ目的のためです。

于 2012-07-23T14:57:57.853 に答える
0

オレクシーに同意します。しかし、ユーザーが Firefox を閉じにくくすることはできます。

現在、「quit-application-requested」オブザーバー通知をリッスンし、aSubject.data を true に設定して Firefox がアプリケーションを終了しないようにするアドオンを (SDK 経由で) 作成しています。

observe: function(aSubject, aTopic, aData) {
    if (aTopic == "quit-application-requested") {
      aSubject.QueryInterface(Ci.nsISupportsPRBool);
      aSubject.data = (this.canQuit() == false);
    }
  }

しかし、私が実際に望んでいるのは、Web アプリケーション (FileMaker データベース) を閉じないように、特定のウィンドウが閉じられていないことです。

したがって、次のように、すべてのコマンド、すべてのキー、およびすべてのメニュー (ブラウザー XUL) を無効にすることも試みました。

var allCommands = win.document.getElementsByTagName("command");
for (let i = 0; i < allCommands.length; i++) {
  allCommands[i].setAttribute("disabled", "true");
}

var allKeys = win.document.getElementsByTagName("key");
for (let i = 0; i < allKeys.length; i++) {
  allKeys[i].setAttribute("disabled", "true");
}

var allMenus = win.document.getElementsByTagName("menu");
for (let i = 0; i < allMenus.length; i++) {
  allMenus[i].setAttribute("disabled", "true");
}

ただし、新しい Firefox ウィンドウが開かないようにしない限り、ユーザーはアプリケーションを終了して Web アプリケーションでウィンドウを閉じることができます。

したがって、「それ」は機能しますが、タブが存在する特定のタブまたはウィンドウを閉じずに参照してもらいたいと思います。

どうやらユーザーが新しいウィンドウを開いたときに Alt+F4 を押すと、アプリケーションが終了するのではなく、ウィンドウが閉じるため、新しいウィンドウを開くのを防止しないと機能しません。すべてのコマンド/キー/メニューを無効にしたと思っていましたが、まだ何らかの近い可能性があります。

新しいウィンドウを開くのを妨げずにそれを達成する方法について誰かアイデアがありますか?

于 2014-07-06T03:50:52.747 に答える