- PR -

「ASP.NET」 接続ユーザの確認方法

1
投稿者投稿内容
chami
会議室デビュー日: 2004/10/20
投稿数: 13
お住まい・勤務地: 大阪
投稿日時: 2005-07-13 09:11
chamiと申します。

DBサーバ:Windows2003 Oracle10g
Webサーバ:Windows2003
開発マシン環境:WindowsXP ProSP2 VS.NET2003
        Framework1.1SP1
oracle接続 ODP.NET 10.1.0.301

現在Webアプリケーションにログインしているユーザを
確認する方法はありませんでしょうか?
ぱっと思いつくところでは、ログイン管理テーブルを設けて
そのテーブルを確認するという方法ですが・・・
それ以外で何かご存知の方いらっしゃいましたら
ご教授願えないでしょうか?

以上、よろしくお願い致します。
甕星
ぬし
会議室デビュー日: 2003/03/07
投稿数: 1185
お住まい・勤務地: 湖の見える丘の上
投稿日時: 2005-07-13 09:19
引用:

chamiさんの書き込み (2005-07-13 09:11) より:
現在Webアプリケーションにログインしているユーザを
確認する方法はありませんでしょうか?


それはユーザー認証をどのような方法で行うのかが分からなければ、答えようが無いと思いませんか?ログイン管理テーブルを設けるのは十分現実的な方法だと思いますけど。
chami
会議室デビュー日: 2004/10/20
投稿数: 13
お住まい・勤務地: 大阪
投稿日時: 2005-07-13 09:43
chamiです。

甕星さんご回答ありがとうございます。
説明不足で申し訳ありません。

このWebアプリケーションはイントラ内での
Webアプリケーションになっております。

ユーザは、ログインページで、ID・パスワードを入力します。
そのIDとパスワードをサーバ側で顧客マスタにアクセスして
チェックしています。
顧客マスタにそのIDが存在したら、Session("ID")=入力したID
を保存し、各画面でそのSession変数があるかどうかを判断しています。

そのSession変数の一覧を確認したり、もしくはWebサーバにアクセスしている
ユーザ(コンピュータ名やIPアドレスなど)を確認したりできないかを知りたいと思い投稿致しました。

ちなみにIIS側での認証方法は、
匿名アクセスを有効(Windowsユーザアカウントは、インターネットゲストアカウント)、
認証済みアクセスは
統合Windows認証にしております。

以上、よろしくお願い致します。
一郎
ぬし
会議室デビュー日: 2002/10/11
投稿数: 1081
投稿日時: 2005-07-13 10:04
ログインした時にログイン管理テーブルにデータを書き込んで、セッションが切れるとき(Global.asaxのSession_Endで)レコードを削除するというのはどうですか。

セッション情報を格納する場所をワーカープロセス内にしていないとSession_Endは動作しないという話を聞いたことがありますが・・・。
chami
会議室デビュー日: 2004/10/20
投稿数: 13
お住まい・勤務地: 大阪
投稿日時: 2005-07-13 10:45
一郎さん、ご回答ありがとうございます。

やはりユーザ管理という意味では、
管理テーブルを利用してチェックした方がいいみたいですね。
ご提示されたものを参考に検討したいと思います。

ただ、oracle10gのEnterprise Manegerみたいにアクティブなセッションとかを
IIS側で確認できたらなぁとか思ってみたりしたんですが
無理ですかね(^^;
葉瀬崎浩樹
大ベテラン
会議室デビュー日: 2005/06/28
投稿数: 115
お住まい・勤務地: 兵庫県
投稿日時: 2005-07-13 11:08
セッションでログイン情報を管理する場合の、
留意事項を書かせていただきます。
回答からは外れてますが、関連分野の情報提供ってことで勘弁を。

【多重ログイン時のSession管理】
・ブラウザを複数立ち上げて、それぞれから同じIDでログインするケース。
・Aクライアント、Bクライアントから同じIDでログインするケース。
→ブラウザ単位にセッションが張られてしまうので、一人のユーザが複数のセッションを持ってしまう。(これが問題になるかどうかは、システム次第)

【セッションをInprocに保持している場合】
・複数のWebサーバを使用した場合には、サーバ毎にセッション情報をもってしまう。
・ワーカープロセスがリサイクルされた場合、セッション情報も消えてしまう。
(これは強制ログアウトの状態のため、それはそれで整合性は取れている)


さんざん既出ですが、
テーブル管理したほうが問題が単純になっていいですよ。
イントラ内のシステムですし。

おっと、書いてる間にCloseしかかってた・・
todo
ぬし
会議室デビュー日: 2003/07/23
投稿数: 682
投稿日時: 2005-07-13 11:27
思いつきですが、Cacheを使うとか。

各ページで
コード:
private void Page_Load(object sender, System.EventArgs e)
{
	Cache.Insert(
		"LoginUser." + Session.SessionID,
		Session["ID"] + "," + DateTime.Now + "," + this.GetType().Name, 
		null, 
		DateTime.Now.AddMinutes(Session.Timeout),
		TimeSpan.Zero
	);
}




ログイン情報の列挙
コード:
private void Button1_Click(object sender, System.EventArgs e) {
	ListBox1.Items.Clear();
	for (IDictionaryEnumerator cEnum = Cache.GetEnumerator(); cEnum.MoveNext(); ) {
		if(cEnum.Key.ToString().StartsWith("LoginUser.")) {
			ListBox1.Items.Add(cEnum.Value.ToString());
		}	
	}		
}

chami
会議室デビュー日: 2004/10/20
投稿数: 13
お住まい・勤務地: 大阪
投稿日時: 2005-07-13 15:13
葉瀬崎浩樹さん、todoさん
ご回答ありがとうございます。

引用:

【多重ログイン時のSession管理】
・ブラウザを複数立ち上げて、それぞれから同じIDでログインするケース。
・Aクライアント、Bクライアントから同じIDでログインするケース。
→ブラウザ単位にセッションが張られてしまうので、一人のユーザが複数のセッションを持ってしまう。(これが問題になるかどうかは、システム次第)



現在まさにこの状態で管理しております。これは顧客了解済みです。

引用:

【セッションをInprocに保持している場合】
・複数のWebサーバを使用した場合には、サーバ毎にセッション情報をもってしまう。
・ワーカープロセスがリサイクルされた場合、セッション情報も消えてしまう。
(これは強制ログアウトの状態のため、それはそれで整合性は取れている)



複数のWEBサーバを立ち上げる事は現状ではないのでそのままデフォルトの
Inprocでセッションを使用しております。


引用:

思いつきですが、Cacheを使うとか。



Cache.Insertは、使用したことがないので試して見ます。
もし使えそうならまた報告致します。

いろいろご教授いただきましたが、素直に管理テーブルを
用意した方がよさそうですね(^^;
1

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