2013-10-30 71 views
0

我有一個簡單的網站在ASP.NET中,我已經加載了一個DLL。我已經通過IIS發佈了網站,我只想在用戶端顯示他的機器名稱,登錄用戶和IP。我曾嘗試以下:如何獲取用戶信息,當他們訪問我的網站

我的DLL:

namespace ClassLibrary1 
    { 
    public class Class1 
    { 
     public string getInfo() 
     { 
     IPAddress[] ips; 

     ips = Dns.GetHostAddresses(Dns.GetHostName()); 

     string returns = null; 

    returns = Environment.MachineName + Convert.ToChar(9) + Environment.UserName; 
     foreach (IPAddress ip in ips) 
     { 
      if (ip.AddressFamily == AddressFamily.InterNetwork) 
      returns += Convert.ToChar(9) + ip.ToString(); 
     } 
     return returns; 

    } 
    } 
} 

並在網站:

public partial class _Default : Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     ClassLibrary1.Class1 cl = new ClassLibrary1.Class1(); 
     Label2.Text = cl.getInfo(); 
    } 
} 

輸出是不是我的預期。在我的機器上,當我訪問該網站,我得到

MyMachineName Classic .NET AppPool MyIp 

而當其他人打開它,他們也得到這些信息,沒有自己的計算機名,登錄用戶和IP。

所以我的問題是如何檢索他們的信息?

在此先感謝。

回答

4

您從服務於該網站的機器獲取統計數據,而不是訪問者的機器。您應該看看HttpRequest.ServerVariablesNameValueCollection

其中一些「變量」,特別是您感興趣的變量,是從客戶端發出的每個Web請求中的標頭派生而來的。請記住,您實際上並不是在說客戶機的,而是從客戶機發送給您。因此,如果他們即使在那裏,也不能保證他們是準確的(代理等)。

這就是說,你是可能感興趣的是:

var ip =  HttpRequest.ServerVariables["REMOTE_ADDR"]; 
var user = HttpRequest.ServerVariables["REMOTE_USER"]; // Windows auth 
var user = HttpRequest.ServerVariables["LOGON_USER"]; // Non-Windows auth 
var machine = HttpRequest.ServerVariables["REMOTE_HOST"]; 

Here's the list of variables從挑選。

+0

要使REMOTE_USER正常工作,必須將IIS/ASP.NET配置爲要求身份驗證。 – EricLaw

+0

@EricLaw:也許'LOGON_USER'會更好嗎? –

+0

有沒有一種方法可以通過在用戶端加載DLL來做到這一點? – Guga

相關問題