1

ユーザーが複数のログインを試みることができないアプリケーションを作成しています。特定のユーザーがログインすると、データベースフラグの値が1に設定されます。これは、同じユーザー名とパスワードを持つ他のメンバーがログインできないことを意味します。

ユーザーがサインアウトした場合、データベースフラグ値は0に設定されます。これはすべて正常に機能していますが、ユーザーがログアウトページなしでブラウザーを突然閉じたり、セッションがタイムアウトしたりすると、データベースフラグ値が自動的に設定されるという別の問題が発生します。 0に。

私はこれについて検索しています。いくつかの記事は、global.asaxファイルを使用して発生する可能性があると述べています。試してみましたが、今のところ何も起こりません。助けてくれますか?

4

2 に答える 2

4

ユーザーがブラウザウィンドウを閉じたことを検出する唯一の安全な方法は、ハートビートを使用することです。つまり、ブラウザはサーバーにリクエストを送信し続け、サーバーがまだ稼働していることを通知します。ASP.netはセッションを追跡するため、非アクティブを検出した後、セッション終了ハンドラーを呼び出します。

したがって、セッションタイムアウトを1分に設定し、45秒ごとにリクエストを送信し続けると、セッション終了ハンドラーは最大1分の遅延で呼び出されます。

于 2012-10-20T20:44:04.953 に答える
2

注:ブラウザーを閉じても、Session_Endイベントが自動的に発生するわけではありません。Session_Endイベントは、セッションが期限切れになると一定の時間が経過すると発生します(このタイムアウト値はIISで設定されます)。デフォルトでは20分に設定されています。ユーザーを非アクティブに設定する唯一の方法は、JavaScriptを使用して、セッションを終了するWebメソッドにajaxリクエストを送信することです。

  1. Webアプリケーションのルートに新しいグローバルアプリケーションクラス(global.ascx)ファイルを作成します。これを行うには、Visual StudioのソリューションエクスプローラーでWebサイトプロジェクトノードを右クリックし、[追加]->[新しいアイテム]を選択します。

次のダイアログが表示されます(Visual Studio 2010の場合-他のバージョンも同様です)
ここに画像の説明を入力してください

  1. [追加]をクリックして、新しいglobal.asaxファイルのコードビハインドを表示します。
  2. これで、いくつかのイベントを含むファイルが表示されるはずです。そのうちの1つはですSession_End。ユーザーセッションを終了するコードをここに入力します。

    protected void Session_End(object sender, EventArgs e)
    {
        // put your code that logs a user out here
    }
    
  3. ユーザーがブラウザを閉じたときにセッションが確実に終了するようにするには、JavaScriptに依存する必要があります。これは、ユーザーがJavaScriptをオフにしている場合は機能しないことに注意してください。 サイトの各ページに、次のようなものを追加する必要があります。

    window.onbeforeunload = function () {
    
        // write an ajax call to a Web Method on your site that ends the session
    
    }
    
于 2012-10-20T20:13:36.990 に答える