2013-12-11 22 views
0

我有一個asp.net web應用程序,我想在用戶電腦中的文本文件中啓動會話時存儲用戶信息。爲此我使用Global.asax和它的void Session_Start()方法。但是當客戶端通過局域網訪問我的頁面時,文本文件不會在我的電腦中創建。只有當我訪問我的頁面時,該文件纔會創建。當客戶端通過局域網訪問我的站點時,我需要我的用戶名,MAC地址,用戶訪問的頁面,會話開始時間,會話結束時間等。我是asp.net的初學者。所以任何幫助將不勝感激。Global.asax中的void Session_Start()方法不適用於通過局域網的客戶端

void Session_Start(object sender, EventArgs e) 
    { 
     string txtFilePath = @"C:\LogInfo.txt"; 
     StreamWriter w // ??? 

     string hostName = 
System.Net.Dns.GetHostEntry(Request.ServerVariables["REMOTE_HOST"]).HostName; 
     UserInfo userObj = new UserInfo(); 
     string macAddress = userObj.GetMACAddress(); 
     HttpContext context = HttpContext.Current; 
     string baseURL = context.Request.Url.AbsolutePath; 

     w = File.CreateText(txtFilePath);//File.AppendText(txtFilePath); 
     w.Write("Start Log Entry: "); 
     w.WriteLine("{0} {1}", DateTime.Now.ToLongTimeString(), 
      DateTime.Now.ToLongDateString()); 
     w.WriteLine("\n"); 
     w.WriteLine("User: {0}", hostName); 
     w.WriteLine("\nMAC Address: {0}", macAddress); 
     w.WriteLine("-------------------------------\r\n"); 
     w.Flush(); 
     w.Close(); 
} 
+0

AFAIK您無法通過HTTP獲取MAC地址。我想你可以得到客戶端的局域網IP地址,然後[ARP](http://technet.microsoft.com/en-us/library/cc961394.aspx)[it](http://stackoverflow.com/questions/ 1148778/how-do-i-access-arp-protocol-information-through-net),假設兩者之間沒有網關。順便說一句,上面的'StreamWriter'似乎是一個問題。 – StuartLC

+0

當客戶端通過局域網訪問頁面時,是否可以在Session_Start中設置斷點,開始調試,然後驗證當有人訪問您的頁面時,至少會觸發會話啓動方法? – sh1rts

+0

你能給我一個關於如何獲得它的詳細信息嗎?感謝您的回覆。 – Reshad

回答

2

您可以使用:

Request.ServerVariables["LOGON_USER"].ToString(); -- User 
Request.UserHostAddress.ToString(); -- User i/p 
Request.PhysicalPath.ToString(); -- Page accessed 

您可以記下時間會議在session_start開始,時間會在Global.asax中

關於網頁的Session_End中方法結束訪問 - 在每頁面訪問時,您可能會將代碼(可能位於基本頁面中)寫入文件所訪問的頁面中。由於可以在會話中訪問多個頁面。

此外,請確保有足夠的權利在您的機器上寫入文件。既然,你有權利,你可以寫沒有問題。您需要模擬您的用戶帳戶或所有用戶的任何帳戶,才能從您的機器寫入文件。

鏈接有關模擬: http://msdn.microsoft.com/en-us/library/xh507fc5.ASPX http://www.pcreview.co.uk/forums/impersonate-user-asp-net-access-network-file-share-t1343830.html

此外,請注意,您只需要模仿訪問某個資源。不要讓用戶整個訪問系統,因爲你想記錄他的信息。

關於MAC地址 - 請參閱以下網址 - http://www.nullskull.com/a/510/get-mac-address-of-any-machine-from-ip.aspx

編碼愉快!

+1

感謝您的回覆。我現在可以在我的電腦上創建文本文件。但是我無法從Session_End()事件獲取會話結束時間,因爲它只會在web.config中的會話時間完成時引發,或者我稱之爲Session.Abandon()。爲此,我想在Session_Start()中檢查單個頁面視圖狀態是否爲零(以便用戶不訪問任何頁面)。但我無法弄清楚如何去做。任何幫助? – Reshad

+0

理想情況下,當會話(即用戶訪問網站的時間段)超時(超過web.config中的會話時間)或用戶點擊註銷(您可以在其中包含session.abandon ))。您不必檢查用戶是否正在查看任何頁面。 – Krishna

相關問題