2009-04-13 16 views
1

私たちは、Webページを開発する際の作業に従います。ページを1つまたは複数のセッション変数にバインドします。これらのセッション変数は、現在の処理オブジェクトを保持するためにのみ使用されます。それら。Webページを閉じるときにセッション変数を破棄する方法はありますか?

ページを閉じるときにこれらのセッション変数を破棄するにはどうすればよいですか? そのテクニックまたはその問題の解決方法に関する提案はありますか?

答えて

4

をログアウトすると、ページが閉じ/左である場合に発生する一切のサーバー側のイベントはありません。また、Session_Endイベント(他の回答に記載)は、ユーザーが同じWebアプリケーションの他のページに移動する可能性があるため、セッションが残っているためページが残っても呼び出されません。

私は解決(または回避)するために3つの可能な方法この問題を考えることができます:

- pageスコープを使用してデータを保存するためにViewStateのを使用しています。これはViewStateのためのものであり、多くのデータを持っていない限り問題にはなりません。多くのデータがある場合は、シリアル化/逆シリアル化され、要求ごとにサーバーに送り返されることに注意してください(要求が大きくなりパフォーマンスが低下する可能性があります)。

- 代わりにセッションにデータを置くこと、(低スライディング満了タイムアウト付き)キャッシュにそれを置きます。あなたのページでは、セッションと同じ方法でデータにアクセスすることができます。つまり、data = Cache ["data"]ですが、キャッシュからデータが削除されたことを前提とする必要があります。 2つの要求の間の時間が有効期限よりも長い場合には、例えばDBから再度)。

- クライアント側(ジャバスクリプト)を使用しONUNLOADイベント、セッションからデータを削除するために、いくつかのアクション(例えば、AJAXコールバック)をトリガします。しかし、私はonUnloadイベントが信頼できないと考えています(ブラウザがクラッシュやタスクマネージャで終了した場合、JavaScriptが無効な場合など)。

+0

ViewStateの場合:処理オブジェクトによってデータとその詳細データが保持されることがあるため、時には多くのデータがあります。 キャッシュについては、viewstateまたはセッションに対するパフォーマンスについてはわかりません。 Unloadイベントでは、あなたの疑問は何ですか? – Ahmed

+0

onUnloadは一貫性がなく、ブラウザがクラッシュした場合、またはブラウザのシャットダウンのようなものがある場合には起動しないことを確認していません。それは私が最近のプロジェクトで使用した解決策だと私は上記の –

+0

に関与していました。 "強制的にシャットダウンする"という意味です。 "ブラウザのシャットダウン"を読んでいます –

0

変数をそのページのみに使用する場合は、viewstateに格納します。 ViewStateはページスコープの変数に適しています。

-1

ASP.NETセッション(おそらくそうです)を使用している場合、あなたのsolutingにglobal.asaxファイルを追加できます。そこでは、このイベント・デリゲートは(ない場合は作成して)発見される:

protected void Session_End(object sender, EventArgs e) 
{ 

} 

...ここでは、あなたのセッション収集をクリアすることができます。

protected void Session_End(object sender, EventArgs e) 
    { 
     Session.Clear(); 
    } 

セッションの有効期限が切れたときに解雇されるか、ユーザーがクリックする:)

+0

これは、セッションが終了したとき、またはユーザーがログアウトをクリックしたときに発生します。これらのセッションの間違いをページのクローズ/クローズ中に破棄する必要がありますか? – Ahmed

+0

私は間違って誤解していました:)マーティンの答えを見てください。しかし、ページを閉じる(または別のページにナビゲートする)ときにクライアントに依存することはできません。これは問題の根本的なものです:( – cwap

関連する問題