注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

天涯倦客的博客

祝福你朋友永远快乐!

 
 
 

日志

 
 

C# 获取域用户信息并统计域用户访问过的页面  

2012-02-15 15:37:36|  分类: asp.net |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

最近,公司让做个网站,因为是内网的,所以为了方便,采用域用户,而不用重新注册。

  1. 下面是根据WindowsPrincipal获取当前域用户的用户名和域

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
using System;
using System.Collections.Generic;
using System.Web;
using System.Security.Principal;
using System.Threading;
 
public class MyPrincipal
    {
        WindowsPrincipal wp = (WindowsPrincipal)Thread.CurrentPrincipal;
 
        /// <summary>
        /// 判断是否是管理员
        /// </summary>
        public bool IsAdmin()
        {
            string adminUsers=Global.WebsiteConfig.SiteConfigValue("ga", "adminUsers");
            return adminUsers.Contains(UserName + ";");
        }
 
        /// <summary>
        /// 域用户名
        /// </summary>
        public string UserName {
            get {
                string[] wpArray = wp.Identity.Name.Split(new string[] { "\\" }, StringSplitOptions.RemoveEmptyEntries);
                return wpArray.Length>0?wpArray[1]:"";
            }
        }
 
        /// <summary>
        /// 域
        /// </summary>
        public string UserDomain
        {
            get
            {
                string[] wpArray = wp.Identity.Name.Split(new string[] { "\\" }, StringSplitOptions.RemoveEmptyEntries);
                return wpArray.Length > 0 ? wpArray[0] : "";
            }
        }
    }

    注 :  上面的方法有点麻烦,徐少侠  提供了一种更为简单的方法来获取域用户,如下:

             首先在Web.config里面配置, 在<system.web>内添加 <identity impersonate="true" />
      然后在代码中使用
      System.Environment.UserDomainName
      System.Environment.UserName

              就ok了。再次感谢 徐少侠

2. 因为要统计域用户的访问记录,并且网站页面很多,不可能每个页面都加上统计代码,这里有两个方法解决(限于个人水平,只想到两个方法,应该还有其它方法):

    a.页面基类的方式,即新建一个页面基类(BasePage),继承page类,并重写OnInit方法,将统计代码写入,然后其它页面继承BasePage就可以了。

    b.HttpModule方式,新建一个asp.net 模块,将统计代码写入AcquireRequestState事件中,具体代码如下:

   
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
public class Counter : IHttpModule
    {
        /// <summary>
        /// You will need to configure this module in the web.config file of your
        /// web and register it with IIS before being able to use it. For more information
        /// see the following link: http://go.microsoft.com/?linkid=8101007
        /// </summary>
        #region IHttpModule Members
 
        public void Dispose()
        {
            //clean-up code here.
        }
 
        public void Init(HttpApplication context)
        {
            context.EndRequest += new EventHandler(context_AcquireRequestState);
        }
 
        void context_AcquireRequestState(object sender, EventArgs e)
        {
            HttpApplication application = (HttpApplication)sender;
            HttpContext context = application.Context;
 
            MyPrincipal mp = new MyPrincipal();
 
            if (mp.UserName!="")
            {
 
                try
                {
                    Log model = new Log();
                    model.UserName = mp.UserName;
                    model.UserDomain = mp.UserDomain;
                    model.Page = context.Request.Url.ToString();
                    model.SessionID = context.Session.SessionID;
                    model.CreateOn = DateTime.Now.ToString("yyyy-MM-dd");
 
                    LogService service = new LogService();
                    if (!service.Exists(model))
                    {
                        service.Insert(model);
                    }
                }
                catch (Exception)
                {
                }
            }
        }
        #endregion
 
    }

注:因为要用到session,所以统计代码写在context_AcquireRequestState事件中,因为在此之前HttpRequest还未交给HttpHandler,session还不存在。并且如果用太靠前的事件,如:BeginRequest等,

WindowsPrincipal wp = (WindowsPrincipal)Thread.CurrentPrincipal; 此处会报错,可能是因为此处CurrentPrincipal还不存在吧。
水平有限,欢迎大家拍砖指正。
  评论这张
 
阅读(768)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017