4

ユーザーがサイトを離れたことを検出し、.Net セッションをすぐに期限切れにするシナリオがあります。フォーム認証を使用しています。すでにあるセッション タイムアウトについて話しているのではありません。ユーザーがリンクを介して、アドレスを入力するか、ブックマークをたどることによって、いつ私たちのサイトから離れたのかを知りたいと思っています。彼らが私たちのサイトに戻ってきたら、たとえすぐにでも、再度ログインする必要があります (これはユーザビリティーが良くないことを理解しています - これは私たちのクライアントから与えられたセキュリティ要件です)。

私の最初の本能は、これは不可能であるか、解決策が非常に信頼できないものになるということです。私たちが思いついた唯一の解決策は次のとおりです。

  • ユーザーがサイトを離れたときにセッションをログアウトするようにサーバーに指示する JavaScript onBlur イベント ハンドラーを追加します。
  • ユーザーがログインしたら、HTTP リファラーをチェックして、ユーザーがサイト内からナビゲートしたことを確認します。
  • AJAX ポーリングをサーバーに追加して、セッションを最新の状態に保ちます (おそらく 10 秒間隔)。電話が時間通りに受信されない場合、セッションは終了します。

onBlur は最も簡単な方法のようですが、おそらく信頼性が最も低い方法のようです。それが機能するかどうかはわかりません。ユーザーがサイト内のアドレスを入力してリンクをたどらない可能性があるため、リファラー メソッドにも問題があります。AJAX メソッドは機能するように見えますが、複雑です。バックエンドでの処理方法もわかりません。それが常に機能するとは限らないシナリオもあると思います。

どんなアイデアでも大歓迎です。ありがとう。

4

5 に答える 5

2

私はあなたが上で説明したようなハートビートタイプのシナリオに行きました。AjaxポーリングまたはIFRAMEのいずれか。ユーザーがブラウザを閉じて一定のタイムアウト(10秒?)が経過すると、ログアウトできます。

もう1つの方法は、サイトを完全にAJAXで実行することです。したがって、ユーザーがアクセスできる「URL」は1つだけであり、すべてのコンテンツが動的にロードされます。もちろん、この方法であらゆる種類のユーザビリティを破りますが、少なくとも目標は達成されます。

于 2009-03-18T22:42:48.557 に答える
0

Javascript には onUnload イベントがあり、ブラウザーがページを離れるように指示されたときにトリガーされます。回答の編集中に [戻る] ボタンを押すか、リンクをクリックしようとすると、StackOverflow でこれを確認できます。

このイベントを使用して、サイトの自動ログオフをトリガーできます。

ただし、ブラウザが意図的に閉じられた場合やブラウザプロセスが外部で終了した場合にこれが処理されるかどうかはわかりません(2番目のケースでは発生しないと思います)。

于 2009-03-19T05:33:04.297 に答える
0

サイト内のすべてのナビゲーションが .NET ポストバック (単純な html リンクまたは JavaScript の open ステートメントなし) を介して行われる場合、ページの読み込みがポストバックでない場合は、自動ログオフを実行してログイン ページにリダイレクトできます。これは終了時にセッションを終了しませんが、Web アプリに手動で移動する場合にログインを強制するため、そのように見えます。すべてのページでこの機能を取得するには、Page_Load でこれを行うマスター ページを使用できます。

private void Page_Load(object sender, System.EventArgs e)
{
    if (!IsPostBack)
    {
        System.Web.Security.FormsAuthentication.SignOut();
        System.Web.Security.FormsAuthentication.RedirectToLoginPage();
    }
}
于 2009-08-18T11:24:06.027 に答える
0

ユーザーがブラウザーを閉じたり、別の URL を入力したり (お気に入りの選択を含む) した場合、検出できることはあまりありません。

サイト上のリンクについては、サイト経由で転送されるリンクを作成できます (つまり、 http://example.com/fooにリンクするのではなく、 http: //mysite.com/forwarder? dest=http://example にリンクします)。 .com/foo )。

意図したサイトにのみ転送するように注意してください。そうしないと、「ユニバーサル転送」がフィッシングなどに使用されてセキュリティの問題が発生する可能性があります.

于 2009-03-18T22:29:10.633 に答える