Global.asax中的void Session_Start()方法不适用于LAN上的客户端

时间:2013-12-11 04:25:28

标签: asp.net

我有一个asp.net Web应用程序,我希望在会话开始时在我的电脑中的文本文件中存储用户信息。为此,我使用Global.asax及其void Session_Start()方法。但是当客户端通过lan访问我的页面时,文本文件不会在我的电脑中创建。只有当我访问我的页面时,文件才会创建。当客户端通过局域网访问我的网站时,我希望我的用户名,mac地址,用户访问的页面,会话开始时间,会话结束时间在我的电脑中的文本文件中。我是asp.net的初学者。所以任何帮助都将受到高度赞赏。

 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(); 
 }

1 个答案:

答案 0 :(得分: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

快乐的编码!!!