最新記事

月別アーカイブ(タブ)

dicdicのランニング

カウンタ (ホームページと合算)

リンク

最新トラックバック

検索フォーム

カテゴリ

QRコード

QR

:スポンサーサイト

--/--/-- (--) --:--
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

スポンサー広告

238:(ASP.NET v4.0 (C#)) アクセスしている人の情報(ユーザー名やコンピュータ名など)を取得する

2016/09/25 (Sun) 14:46
 (前回のログ出力の続き)
 システム開発の開始から間もないころ、ログの設計をする際に、
「アクセス者のOSユーザーID」や「クライアントマシン名」を吐き出したい
と言い出す人が(必ず)いて、
「ユーザーIDを取得するにはどうすんだっけ」となって
調べまわすということがよく起こる。
 ペース的には年に一回ぐらいかな。

やりクチ自体は、そう難しいものではないのだが、開発を
行っている環境やIISの設定によっては、うまく取得できなかったり、
意図しない値が返ってきて、「うーーーーん」と悩んだりする。

【クライアントマシン情報の取得】
まぁ、IPアドレスなら これ↓
Request.ServerVariables["REMOTE_ADDR"]
この返り値の文字列を、なんか(たとえばaaa)とかに容れといて、
System.Net.Dns.GetHostEntry(aaa).HostName
なんてしてやるとコンピュータ名が取得できる。

ところが、開発段階で調子に乗って、
Request.ServerVariables["LOCAL_ADDR"]
とか
Request.ServerVariables["SERVER_NAME"]
を使って、「よしよし取得できた」なんつって、
いざ公開してみると「うへーっ」ってことになっちゃう。

ローカルにモジュールを置いて開発していると、
サーバ=(いこーる)クライアントになっているから、
サーバ名が表示されているのに、クライアント名が
表示されているものと勘違い
し、スルーされ、
あとから気づいて大恥をかく。
(あっ、自分のことです。)
コンピュータ名も、名前解決できるかどうかによって、
ローカルで開発している場合と、モジュールをサーバに
あげて開発している場合では結果が異なることがある。
コピペでやっているとこういうことがしょっちゅう起きる。
(あっ、これも自分のことね。)
20160925a


【クライアントのログインユーザー情報の取得】
ログインユーザーも、そんなに難しいコトじゃない。
Request.ServerVariables["REMOTE_USER"]
Request.ServerVariables["LOGON_USER"]

あたりで取得できる。
[ドメイン名\ユーザー名]の形式になっているが、
情報は多いに超したことはない。
ドメイン名が邪魔なら¥マークより前をカットすればいい。
20160925b

あ、こっちにも失敗談あります。
ローカルで開発しているとね、コンピュータ名取得の失敗と
同じ理由でトラップにはまります。
間違って
System.Security.Principal.WindowsIdentity.GetCurrent().Name
なんかを使っちゃうと、ローカルで開発しているときは
バッチリ自分のユーザーIDが取得できて「よしよし」とかなっちゃう。
ところが、いざサーバーに公開してアクセスしてみると
IIS APPPOOL\ASP.NET v4.0
とかがバーンと表示されて、またまた恥ずかしい思いをする。

Environment.UserName
も同じ。 ローカルで開発中は自分のユーザーIDが表示されるが、
公開してクライアント側からつついたとたんに「ASP.NET v4.0」
となり、"サーバー側から見たローカル" としての立場から値を
返してく
るので注意。

なぜか、質問掲示板などで、この二つを回答として
エラそうに答える人がいるのだ。わざとかなぁ...



(ユーザー情報取得の補足)
IISの設定によっては、ユーザーIDを取得したつもりが、
Nullになって返ってくることがあります。 これは悲しい。
原因がIISの設定によるもの(匿名認証が「有効」になっている)
なのであれば、以下のような作業で解消できるかも。
①IISマネジャで対象のアプリを選択
②認証のアイコンをクリック
20160925c

③Windows認証を「有効」に変更
20160925d

④IISを再起動 (停止して、すぐ開始)

※環境によっては勝手にやるとむっちゃ怒られるので注意。

以上、次回この問題で自分が悩まないために。
スポンサーサイト

ASP.NET v4.0 (C#)コメント(0)トラックバック(0)|

≪前の記事 マリナーの訃報に触れて
≫次の記事 (ASP.NET v4.0 (C#)) XMLを出力する(新規作成)、そして、追記する(ファイル既存確認)。

コメント

コメントの投稿

名前
題名
メールアドレス
URL
コメント

パスワード
Secret
管理者にだけ表示を許可する

トラックバック

ブログ TOP


上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。