- - PR -
Application変数について
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2006-07-13 17:11
Webプロジェクトにて、Session変数とは別に全員が共通してもつ値としてApplication変数に値を格納しており、作成した「画面を閉じるボタン」を押して画面を閉じれば、そのセッションで格納したApplication変数の中身だけ削除するようにしています。
しかし、右上の「×」ボタンによる閉じるや、Alt+F4などの強制的?な閉じ方をされると、当然かもしれませんがずっと値が残ります。 Application_Endのところに削除するプログラムを書いても削除されません。 強制終了のときに、そのセッションにて作成したApplication変数を削除するにはどうすればいいのでしょうか? (開発:ASP.Net VS2003 VB.NET) | ||||
|
投稿日時: 2006-07-13 17:36
Application_Endはそんなイベントではないですから。 IE限定ならば、クライアントスクリプトのonbeforeunloadイベントでサーバーに非同期でリクエストを投げるようにするって方法もあるかもしれません。(試してないですが) ただ、PCの電源をイキナリ落としたりされたケースなど、完璧に対応する方法はありません。 なので、設計を見直すべきでしょう。 [ メッセージ編集済み 編集者: burton999 編集日時 2006-07-13 17:36 ] | ||||
|
投稿日時: 2006-07-13 17:37
> Application_Endのところに削除するプログラムを書いても削除されません。
Application_Endはサービスとしてサーバ上で動作しているWebアプリケーションが 終了するタイミングで発生するイベントです。 そのWebアプリケーションに誰も触らなくなって既定の時間がすぎるとWebアプリは 一端終了するようになってますが、そういったときでないと実行されませんね。 > 強制終了のときに、そのセッションにて作成したApplication変数を削除するには > どうすればいいのでしょうか? 強制終了をサーバ側で判断することは不可能なので、基本的にはできません。 根本的な仕様を考え直す必要があるかな? #全員が共通して持つ値なのに、なぜSession単位で削除する必要があるのだろう。。。 | ||||
|
投稿日時: 2006-07-14 09:23
ご返答ありがとうございます。
その件に関しては、ご指摘どおり仕様を考え直すことにしました。 この件とは別ですが、もう1つ教えてください。 ホームページとかで、現在のページ観覧人数や 観覧者がだれかとかを見れるサイトがたまにありますが、 あれはどうやってるのでしょうか? | ||||
|
投稿日時: 2006-07-14 10:24
> ホームページとかで、現在のページ観覧人数や
> 観覧者がだれかとかを見れるサイトがたまにありますが、 > あれはどうやってるのでしょうか? セッションスタートでApplication変数のようなものに人の情報をいれて セッションエンドでその人の情報を消しているのだと思います。 ただし、これはWebアプリケーションの特性上、厳密に現在の状態を とれるようにはなりません。 | ||||
|
投稿日時: 2006-07-14 10:44
ご返答ありがとうございます。
現在のWebアプリケーションでは厳密に現在の状態を取るのは なかなか難しいんですね。 | ||||
|
投稿日時: 2006-07-14 11:03
セッションエンドでは流石に・・・(^^; セッションエンド依存すると、スケールアップ出来なくなるのでお勧めしません。 セッションごとに最後にHTTPのリクエストが発生した日時を覚えておいて、一定時間経過したら閲覧をやめた(ログアウトした)とみなすのですよ。 _________________ 甕星 <mikahosi@abox9.so-net.ne.jp> http://blogs.msmvp.jp/mikahosi/ | ||||
|
投稿日時: 2006-07-14 12:44
スケールアウトだと思ふ… それはさておき、上記の方法もそれはそれでなかなか簡単ではなかったりしますね。 |
1