"HttpContext.ます。セッション"vsす。asaxをする人が多くなっています。セッション"
-
19-08-2019 - |
質問
最近では、一部のコード用ASP.NET プロジェクトです。この追跡utilを基本指標をユーザーの活動のページのヒットカウントなど)このトラックに Session
, を押すと、データのDBによ Session_End
に Global.asax
.
私はハッキングは、当時の初期化コードに手を更新しDBはそれぞれのページ負荷時のものです。たいと思ったこのDBのヒットリクエストごとがかな Session_End
店舗のすべてのデータです。
すべてのトラッキングコードカプセル化され、 Tracker
クラスを含む性質が本質的にラップセッションの変数.
の問題 この時に実行され Tracker.Log()
の Session_End
方法は、 HttpContext.Current.Session
のトラッカーコードの失敗と NullReferenceException
.現在、この意味から HttpContext
常に関するもの 現在の ご希望のコース Session_End
, ありません。
知っている Global.asax
は Session
性を返します HttpSessionState
実際にそうな作(し注入では、トラッカー)..
私は、こうした興味のある人は、どのように地獄を見たいので同じに HttpSessionState
オブジェクトを使用する Global.asax
から 外部 の Global.asax
?
よろしくお願いいを入力します。:)
解決
グローバルasaxを実装しHttpApplication-というお話をご利用いただきます この らかにすることにあります。
にMSDN書 HttpApplication は、内容についてはできるのでHttpHandlerして、例えばアクセスの様々な特性です。
しかし
お申し込み可能の作成の複数インスタンスのHttpApplication取扱い並列の要求は、これらのインスタンスで再使用することができ、みたいなのでなんとかいうものではありませんguarenteeする権利を持っています。
私も、もう追加の注意-アプリケーションの場合はクラッシュがguarenteeるsession_endを呼んを失ったすべてのデータは全てのセッションを明確にしないかもしれない。
同意するとロギングでは、各ページにはいない素晴らしいアイデアも、途中でハウスと非同期ログイン起きてき火を詳細にログインクラスとしてログの詳細について-ない100%固体の場合はアプリがクラッシュがんにくを失います。
他のヒント
回答元の問題より:
背景
各ページのリクエスピンの新しい Session
オブジェクトを膨らにセッション。このためには、このクッキーのお客様にご提供いただく特別のパスの構築(cookielessセッション).このセッション識別子で協議のセッション店deserializes(このはなぜすべての事業者がInProc必要が直列化可能)のセッションオブジェクトです。
の場合はInProcプロバイダーは単に手にする参照も保存され、 HttpCache
鍵付きのセッション識別子です。 そのため、InProcプロバイダ滴セッション状態の場合の AppDomain
リサイクルもありましたか複数のwebサーバで共有InProcセッションの状態.
この新規作成された膨らませオブジェクトにこだわったの Context.Items
コレクションでの期間になります。
変更する Session
オブジェクトはその続きのご要望のセッション店による直列化さ(の場合InProc、 HttpCache
入力は更新).
以降 Session_End
火災現在までご要望をオンザフライでの Session
オブジェクトはピッex-niloとなることができます。を使用する場合はInProcセッションの状態を終了 HttpCache
トリガーでのコールバックイベントにお Session_End
イベントでのセッションで、それでも、コピーの何が最後に保管され HttpContext.Cache
.この値が格納されに対する HttpApplication.Session
物件内法と呼ばれる ProcessSpecialRequest
がいします。の下でのその他のすべての場合、内部からの HttpContext.Current.Session
値とします。
ご回答
以降、Session_End常に火災に対するnull文脈を使用。セッションイベントや峠のHttpSessionStateオブジェクトザ-ミートガイで取りトレースコードです。その他のすべてのコンテキスト...でもフェッチから HttpContext.Current.Session
その手のトレースコードです。 ない, しかし、せめてのトレースコードの上にセッションコンテキスト
私の答え
使用しない Session_End
なることをご存知のセッション店舗をご利用の支援 Session_End
, ができ は 場合を返します true
から SetItemExpireCallback
.のみの店舗は、 InProcSessionState
ます。書き込みが可能となりますセッションがいませんが、人研修事業サポート,中国ビジネスの Session_End
あのような曖昧なものが複数ある場合はサーバー
と思うのですが答えはご質問:通常のセッション物件です。asaxとHttpContext.ます。セッション同じものがある場合には、電流ます。がの場合はセッションタイムアウトがアクティブな要求が使用できませんHttpContext.ます。
アクセスしたいならば、セッションメソッドから呼び出Session_End、そのパスとしてパラメータとします。作成過版のLog()メソッドは人間のHttpSessionStateパラメータとして、電話トラッカー。ログ(こちら。セッション)からSession_Endイベントハンドラです。
ちなみ:いることはできませんのセッション終了イベントはかるでしょうか?まだ作業などのセッション状態でのプロセスです。使用時のSQLサーバーまたはStateServerにmangeのセッションの状態で、セッション終了イベントしません。
の Session_End
イベントを上げた場合のみ sessionstate mode
設定 InProc
の Web.config
ファイルです。場合にセッションモードに設定される StateServer
または SQLServer
, その場で決済までオンラインでない上げています。
使用 Session["SessionItemKey"]
のセッションの値です。
大丈夫、私は同じような問題のセッションです。の代わりにsession_endイベント、実施のIDisposable ースのデストラクタマsessiontrackerクラスです。を修Dispose()メソッドを保存するセッション活動DBです。私は呼び出される法obj.Dispose()ユーザがクリックすると、グアウトボタンを押します。ご利用いただくユーザのブラウザによる間違い、GCコンのデストラクタは清掃中のオブジェクト(いかだでは、このメソッドを呼び出後時).のデストラクタのメソッドを内部で実行同Dispose()メソッドを保存するセッション活動DBです。
-シャン
セッションでのご用意です。asaxファイルの中で、Session_Startイベントです。うまでお待ちこん?
こSession_End行時のセッション時間なし。ブラウザのない起因するイベントで有効)、その時に、実際のイベント利用の場合はInProcプロバイダです。毎その他のプロバイダは、このイベントません。
徳?なSession_End.