2012-11-06 153 views

答えて

9

短いバージョン番号: クライアントがブラウザを閉じたかどうかをサーバーが検出する方法はありません。それはWeb開発の非同期パターンの本質です。

ロングバージョン、本当にあなたにとって本当に重要なのであれば、 バックグラウンドであなたのウェブサイトへの定期的な投稿を送信し、これらの定期的な "ハートビート"信号を受信しない場合、セッションを廃棄するサーバサイドのエージェントまたはサービスを設定するJavaScriptのビットをページに入れます。

JavaScriptのポストバックをページのunload()イベントに置くことはできますが、それに依存することはありません。常に起動しません。

+0

ハートビートのコントローラアクションまたはハンドラを設定する代わりに、ハートビート間隔の1分後にセッションタイムアウトを設定するだけです。その後、クッキーが期限切れになるので、ブラウザは自動的にセッションを破棄します。 –

+0

JavaScriptからのアプローチでは、タイムアウト機能が主要なセキュリティ機能の1つを実行しないようにしてください。ユーザーがPCから離れた場合にユーザーに署名してください。私はあなたがこれを行い、あなたのサイトで専門的なセキュリティ監査を受けることを保証します、タイムアウトの欠如は問題としてフラグが立てられます。 – elexis

0

:でそれを確認してください。

それはあなたがおよそ は、サーバー上のデータを消去する心配する必要はありませんように、あなたの呼び出しであるべきセッションデータをサーバと 上に保存してはならないことを意味します。

+0

ブラウザのクローズイベントとは何が関係していますか?ユーザーがブラウザを閉じると、何も起きません。クッキーはクライアント側で何もしません。 –

+0

@RenéWolferinkL:セッションデータをサーバーに保存しないでください。サーバー上のデータを消去する心配がありません。 –

1

これは、ブラウザを閉じるたびにデフォルトで行われます。これは、ASP.NETだけではありません。これは、セッション状態を持つほとんどのサーバー側プログラミング言語のためのものです。基本的に、有効期限を指定しないクッキーは、ブラウザが閉じたときに削除されます。

これは適用されません。これは、タブを閉じるときに発生します。これは、タブクローズイベントがWebサーバーに返送されないため、制御できないものです。

-1

あなたは)別の方法として、あなたはすべての新しいブラウザ開度にあなたの前のセッションの状態を確認することができますし、Session.clearできる()またはSession.abandon(前のセッションをGlobal.aspx

//For Specific Session 
Session.Remove("SessionName"); 

//All the Session 
Session.Abandon(); 
+3

iShare:申し訳ありませんが、ブラウザが閉じられたときに起動しません... – Saravanan

+0

そうです - 明示的に設定されていない場合、セッションタイムアウト期間(明示的に設定されていないとIISが20分)ブラウザから。だから、それは推測であり、ユーザーが実際にあなたのサイトの使用をやめた後にしばしば発生します。 – Jon

+0

これは、セッションがタイムアウトすると呼び出されます。 –

1

ののSession_Endイベントを使用することができます。

これは、アプリケーションを起動するたびに新しいセッションを取得することを確認します。

  1. .netアプリケーションでBasePageを使用します。
  2. 基本ページの負荷でsession.sessionidを確認してください。
  3. その他の情報ベースページの新しいセッションを検出する方法。 BasePage.Session.Link

希望ブラウザを閉じたときに、これは、すべてのブラウザに自動的に明確なセッションの に関して Shaz

public class BasePage : Page 
{ 

      protected string mySessionId; 

      private CurrentUser _currentUser; 
      public CurrentUser _CurrentUser 
      { 
       get { return ((CurrentUser)HttpContext.Current.Session["myCurrentUser"]); } 
       set { _currentUser = value; } 
      } 


      protected override void OnLoad(EventArgs e) 
      { 

       if (Session["myCurrentUser"] != null) 
       { 
        if (_CurrentUser.ProUser) 
        { 

         mySessionId = Session.SessionID; // it means New Session 

        } 

        if (!mySessionId.IsNullOrDefault() && mySessionId != Session.SessionID) 
        { 
         Session.Abandon(); //Abandon current session and start new one     

        } 
       } 


      } 

} 
0

Yes.Firstに役立ちます。アンロード前とアンロード時のようなjavascript関数を使用して、ブラウザーでブラウザークローズまたはタブクローズイベントをキャプチャーしようとすることができます。ほとんどのonbeforeアンロードイベントはクロム、Firefox、IE 11のブラウザクローズイベントをキャプチャします。

関連する問題