namespace WebApplication.App_Start
{
public class WFFormPrincipal : IPrincipal
{
public IIdentity Identity { get; private set; }
//用戶資料
public WFFormsAuthentication UserData { get; private set; }
public WFFormPrincipal ( FormsAuthenticationTicket ticket, WFFormsAuthentication userData )
{
if (ticket == null)
throw new ArgumentNullException("ticket");
if (userData == null)
throw new ArgumentNullException("userData");
Identity = new FormsIdentity(ticket);
UserData = userData;
}
//角色驗證
public bool IsInRole ( string role )
{
return false;
}
}
public class WFFormsAuthentication
{
public string SessionId { get; set; }
public string UserId { get; set; }
public string Name { get; set; }
public string TrueName { get; set; }
public string LoginTime { get; set; }
private const int CookieSaveDays = 20;
public static string SetAuthCookie ( string username, WFFormsAuthentication userData, bool remember )
{
if (userData == null)
throw new ArgumentNullException("userData");
var data = Newtonsoft.Json.JsonConvert.SerializeObject(userData);
var expires = remember ? DateTime.Now.AddDays(30) : DateTime.Now.AddDays(1);
var ticket = new FormsAuthenticationTicket(1, username, DateTime.Now, expires, true, data);
var cookieValue = FormsAuthentication.Encrypt(ticket);
var cookie = new HttpCookie(FormsAuthentication.FormsCookieName, cookieValue)
{
HttpOnly = false,
Secure = FormsAuthentication.RequireSSL,
Domain = FormsAuthentication.CookieDomain,
Path = FormsAuthentication.FormsCookiePath,
};
cookie.Expires = expires;
HttpContext context = HttpContext.Current;
if (context == null)
throw new InvalidOperationException();
context.Response.Cookies.Remove(cookie.Name);
context.Response.Cookies.Add(cookie);
return cookieValue;
//context.Response.Cookies.Add(new HttpCookie("test", DateTime.Now.ToString("yyyyMMdd HHmmss")) { Expires=DateTime.Now.AddDays(1)});
}
public static void SignOut ( )
{
var cookie = new HttpCookie(FormsAuthentication.FormsCookieName, "")
{
HttpOnly = true,
Secure = FormsAuthentication.RequireSSL,
Domain = FormsAuthentication.CookieDomain,
Path = FormsAuthentication.FormsCookiePath,
Expires = DateTime.Now.AddDays(-1)
};
HttpContext context = HttpContext.Current;
if (context == null)
throw new InvalidOperationException();
context.Response.Cookies.Add(cookie);
}
public static WFFormPrincipal TryParsePrincipal ( HttpContext context )
{
if (context == null || context.Request == null)
throw new ArgumentNullException("context");
var cookie = context.Request.Cookies[FormsAuthentication.FormsCookieName];
if (cookie != null && !string.IsNullOrEmpty(cookie.Value))
{
try
{
var ticket = FormsAuthentication.Decrypt(cookie.Value);
if (ticket != null && !string.IsNullOrEmpty(ticket.UserData))
{
var userData = Newtonsoft.Json.JsonConvert.DeserializeObject<WFFormsAuthentication>(ticket.UserData);
if (userData != null)
{
return new WFFormPrincipal(ticket, userData);
//return IsValid(userData.SessionId) ? new WFFormPrincipal(ticket, userData) : null;
}
}
}
catch
{
}
}
return null;
}
}
}
//我這里是通過寫cookie方式實作用戶登錄 但是服務器做了負載均衡后就一直登錄不上去
uj5u.com熱心網友回復:
怎么用cookie呢,應該用session轉載請註明出處,本文鏈接:https://www.uj5u.com/net/93443.html
標籤:C#
上一篇:求arcgis engine10.0或者10.2的安裝包 帶破解的
下一篇:后臺代碼
