- PR -

Application変数について

1
投稿者投稿内容
ルーキー
常連さん
会議室デビュー日: 2006/05/08
投稿数: 20
投稿日時: 2006-07-13 17:11
Webプロジェクトにて、Session変数とは別に全員が共通してもつ値としてApplication変数に値を格納しており、作成した「画面を閉じるボタン」を押して画面を閉じれば、そのセッションで格納したApplication変数の中身だけ削除するようにしています。
しかし、右上の「×」ボタンによる閉じるや、Alt+F4などの強制的?な閉じ方をされると、当然かもしれませんがずっと値が残ります。
Application_Endのところに削除するプログラムを書いても削除されません。
強制終了のときに、そのセッションにて作成したApplication変数を削除するにはどうすればいいのでしょうか?
(開発:ASP.Net VS2003 VB.NET)
burton999
ぬし
会議室デビュー日: 2003/10/06
投稿数: 898
お住まい・勤務地: 東京
投稿日時: 2006-07-13 17:36
引用:

Application_Endのところに削除するプログラムを書いても削除されません。
強制終了のときに、そのセッションにて作成したApplication変数を削除するにはどうすればいいのでしょうか?



Application_Endはそんなイベントではないですから。
IE限定ならば、クライアントスクリプトのonbeforeunloadイベントでサーバーに非同期でリクエストを投げるようにするって方法もあるかもしれません。(試してないですが)
ただ、PCの電源をイキナリ落としたりされたケースなど、完璧に対応する方法はありません。
なので、設計を見直すべきでしょう。



[ メッセージ編集済み 編集者: burton999 編集日時 2006-07-13 17:36 ]
どっとねっとふぁん
ぬし
会議室デビュー日: 2005/02/23
投稿数: 935
投稿日時: 2006-07-13 17:37
> Application_Endのところに削除するプログラムを書いても削除されません。

Application_Endはサービスとしてサーバ上で動作しているWebアプリケーションが
終了するタイミングで発生するイベントです。
そのWebアプリケーションに誰も触らなくなって既定の時間がすぎるとWebアプリは
一端終了するようになってますが、そういったときでないと実行されませんね。

> 強制終了のときに、そのセッションにて作成したApplication変数を削除するには
> どうすればいいのでしょうか?

強制終了をサーバ側で判断することは不可能なので、基本的にはできません。
根本的な仕様を考え直す必要があるかな?

#全員が共通して持つ値なのに、なぜSession単位で削除する必要があるのだろう。。。
ルーキー
常連さん
会議室デビュー日: 2006/05/08
投稿数: 20
投稿日時: 2006-07-14 09:23
ご返答ありがとうございます。
その件に関しては、ご指摘どおり仕様を考え直すことにしました。

この件とは別ですが、もう1つ教えてください。
ホームページとかで、現在のページ観覧人数や
観覧者がだれかとかを見れるサイトがたまにありますが、
あれはどうやってるのでしょうか?
どっとねっとふぁん
ぬし
会議室デビュー日: 2005/02/23
投稿数: 935
投稿日時: 2006-07-14 10:24
> ホームページとかで、現在のページ観覧人数や
> 観覧者がだれかとかを見れるサイトがたまにありますが、
> あれはどうやってるのでしょうか?

セッションスタートでApplication変数のようなものに人の情報をいれて
セッションエンドでその人の情報を消しているのだと思います。
ただし、これはWebアプリケーションの特性上、厳密に現在の状態を
とれるようにはなりません。
ルーキー
常連さん
会議室デビュー日: 2006/05/08
投稿数: 20
投稿日時: 2006-07-14 10:44
ご返答ありがとうございます。
現在のWebアプリケーションでは厳密に現在の状態を取るのは
なかなか難しいんですね。

甕星
ぬし
会議室デビュー日: 2003/03/07
投稿数: 1185
お住まい・勤務地: 湖の見える丘の上
投稿日時: 2006-07-14 11:03
引用:

どっとねっとふぁんさんの書き込み (2006-07-14 10:24) より:
セッションスタートでApplication変数のようなものに人の情報をいれて
セッションエンドでその人の情報を消しているのだと思います。


セッションエンドでは流石に・・・(^^;
セッションエンド依存すると、スケールアップ出来なくなるのでお勧めしません。

セッションごとに最後にHTTPのリクエストが発生した日時を覚えておいて、一定時間経過したら閲覧をやめた(ログアウトした)とみなすのですよ。
_________________
甕星 <mikahosi@abox9.so-net.ne.jp>
http://blogs.msmvp.jp/mikahosi/
なちゃ
ぬし
会議室デビュー日: 2003/06/11
投稿数: 872
投稿日時: 2006-07-14 12:44
引用:

甕星さんの書き込み (2006-07-14 11:03) より:
セッションエンド依存すると、スケールアップ出来なくなるのでお勧めしません。

セッションごとに最後にHTTPのリクエストが発生した日時を覚えておいて、一定時間経過したら閲覧をやめた(ログアウトした)とみなすのですよ。


スケールアウトだと思ふ…
それはさておき、上記の方法もそれはそれでなかなか簡単ではなかったりしますね。
1

スキルアップ/キャリアアップ(JOB@IT)