using System; using System.Collections.Generic; using System.Linq; using System.Web; namespace CommonHelper { /// /// 用户登陆信息提供者。 /// public class OperatorProvider { /// /// Session/Cookie键。 /// private const string LOGIN_USER_KEY = "LoginUser"; private OperatorProvider() { } static OperatorProvider() { } //使用内部类+静态构造函数实现延迟初始化。 class Nested { static Nested() { } internal static readonly OperatorProvider instance = new OperatorProvider(); } /// /// 在大多数情况下,静态初始化是在.NET中实现Singleton的首选方法。 /// public static OperatorProvider Instance { get { return Nested.instance; } } /// /// 从配置文件读取登陆提供者模式(Session/Cookie)。 /// private string LoginProvider = Configs.GetValue("LoginProvider"); /// /// 从配置文件读取登陆用户信息保存时间。 /// private int LoginTimeout = Convert.ToInt32(Configs.GetValue("LoginTimeout")); /// /// 从Session/Cookie获取或设置用户操作模型。 /// /// public Operator Current { get { Operator operatorModel = new Operator(); if (LoginProvider == "Cookie") { operatorModel = WebHelper.GetCookie(LOGIN_USER_KEY).DESDecrypt().ToObject(); } else { operatorModel = WebHelper.GetSession(LOGIN_USER_KEY).DESDecrypt().ToObject(); } return operatorModel; } set { if (LoginProvider == "Cookie") { WebHelper.SetCookie(LOGIN_USER_KEY, value.ToJson().DESEncrypt(), LoginTimeout); } else { WebHelper.SetSession(LOGIN_USER_KEY, value.ToJson().DESEncrypt(), LoginTimeout); } } } /// /// 从Session/Cookie删除用户操作模型。 /// public void Remove() { if (LoginProvider == "Cookie") { WebHelper.RemoveCookie(LOGIN_USER_KEY); } else { WebHelper.RemoveSession(LOGIN_USER_KEY); } } } /// /// 操作模型,保存登陆用户必要信息。 /// public class Operator { public Operator() { UserId = 0; LoginTime=DateTime.Now; } /// /// 用户id(未登录为0) /// public int UserId { get; set; } /// /// 登录名 /// public string LoginName { get; set; } /// /// 真实姓名 /// public string RealName { get; set; } /// /// 密码 /// public string Password { get; set; } /// /// 用户类型 /// public int UserType { get; set; } /// /// 登录时间 /// public DateTime LoginTime { get; set; } /// /// token /// public string Token { get; set; } /// /// 头像url /// public string Avator { get; set; } } }