通用權限管理系統平臺採用Froms認證方式實現對用戶登陸,爲解決session超時問題,致使用戶重複登陸的問題,系統採用cookies保存,並實現靈活保存登陸信息。web
實現Forms認證,須要在web.config增長配置項cookie
<authentication mode="Forms">
<forms loginUrl="~/Home/LogOn" timeout="2880" slidingExpiration="true" cookieless="UseCookies"/>
<!--採用滑動時間-->
</authentication> session
自定義實現Authentication類,並實現建立登陸用戶的票據信息方法less
/// <summary>
/// 建立登陸用戶的票據信息
/// </summary>
/// <param name="strUserName"></param>
/// <param name="strPassword"></param>
/// <param name="strIP"></param>
public static void CreateLoginUserTicket(string strUserName, string strPassword,string strIP)
{
//構造Form驗證的票據信息
TUserDo mUserEntity=new TUserDo();
Filter filter = Filter.Null;
filter.And(Filter.Eq("LoginId", strUserName.Trim()));
filter.And(Filter.Eq("Password", Common.Md5Encrypt(strPassword.Trim())));
filter.And(Filter.Eq("IsDelete", "0"));
filter.And(Filter.Eq("IsUser", "0"));
List<TUserDo> list = DataAccess.FindByFilter<TUserDo>(filter);
if(list.Count>0)
{
mUserEntity=list[0];
}
int expires = ConvertData.ToInt(System.Configuration.ConfigurationManager.AppSettings["CookiesExpires"].ToString().Trim(), 1);
FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1, mUserEntity.UserGuid, DateTime.Now, DateTime.Now.AddHours(expires),
true, string.Format("{0}",strIP), FormsAuthentication.FormsCookiePath);
string ticString = FormsAuthentication.Encrypt(ticket);
//把票據信息寫入Cookie和Session
//SetAuthCookie方法用於標識用戶的Identity狀態爲true
#region Cookies
HttpContext.Current.Response.Cookies.Add(new HttpCookie(FormsAuthentication.FormsCookieName, ticString));
HttpContext.Current.Response.Cookies[FormsAuthentication.FormsCookieName].Expires = System.DateTime.Now.AddHours(expires);
FormsAuthentication.SetAuthCookie(mUserEntity.UserGuid, true);
#endregion Cookies
//HttpContext.Current.Session[EAPConst.eap_ipAdress] = strIP;
//HttpContext.Current.Items[EAPConst.eap_ipAdress] = strIP;
//重寫HttpContext中的用戶身份,能夠封裝自定義角色數據;
HttpContext.Current.Response.Cookies.Add(new HttpCookie(EAPConst.eap_Adress, ticket.UserData));
HttpContext.Current.Response.Cookies[EAPConst.eap_Adress].Expires = System.DateTime.Now.AddHours(expires);
string[] info = ticket.UserData.Split(',');
IIdentity identity = new FormsIdentity(ticket);
IPrincipal principal = new GenericPrincipal(identity, info);
HttpContext.Current.User = principal;
} ide
/// <summary>
/// 用戶註銷執行的操做
/// </summary>
public static void Logout()
{
System.Web.HttpContext.Current.Request.Cookies[FormsAuthentication.FormsCookieName].Values.Clear();
FormsAuthentication.SignOut();
} ui
}orm
登陸認證直接調用該方法進行認證。ip