在我的应用程序中,当用户当时登录时,我想存储一些用户信息,例如名字、姓氏、ID、员工 ID 等,我想在我的 Web 应用程序的许多地方使用这些信息。以前我使用的是表单身份验证
FormsAuthentication.SetAuthCookie(empDetails.Employee.EmployeeId, false);
但它只存储一个参数。我想存储将在我的应用程序中使用的多个数据。
谁能告诉我最好的方法来做到这一点。
在我的应用程序中,当用户当时登录时,我想存储一些用户信息,例如名字、姓氏、ID、员工 ID 等,我想在我的 Web 应用程序的许多地方使用这些信息。以前我使用的是表单身份验证
FormsAuthentication.SetAuthCookie(empDetails.Employee.EmployeeId, false);
但它只存储一个参数。我想存储将在我的应用程序中使用的多个数据。
谁能告诉我最好的方法来做到这一点。
auth cookie 可用于保存字符串。这个字符串可以编码你想要的所有数据。我通常会创建一个包含我想要保存的所有信息的对象(例如 ConnectedUser 类)。然后我重写该类的 ToString() 以返回格式中的字符串,稍后我可以对其进行解码以重建 ConnectedUser 实例。如果您的所有模型都从单个基本模型继承,这甚至会变得更容易,那么基本模型可以具有 ConnectedUser 类型的属性,然后您可以扩展 DefaultModelBinder 并覆盖 OnModelUpdated() 以重建连接用户的实例。通常我通过一个接受请求上下文的方法来执行此操作,就像如果由于某种原因没有调用模型绑定器,我可以从代码中的其他地方调用它。
编辑
public class ConnectedUser{
public string FirstName{get;set;}
public string LastName{get;set;}
public override string ToString(){
return string.format("FirstName{0}{1}{2}LastName{0}{3}",EqualDelimiter, FirstName, EntryDelimiter, LastName);
}
}
现在在 Auth cookie 的构造函数中,而不是传入 userId,而是向它传递一个 ConnectedUser 的实例,其中填写了 FirstName 和 LastName。当收到请求时,您可以使用这两种方法检索连接的用户,这两种方法可以从defaultModelBinder 的自定义扩展或操作方法内部等。
public static ConnectedUser GetConnectedUser(HttpContextBase executingContext)
{
var dictionary = GetAuthCookieData(executingContext);
var toRet = new ConnectedUser
{
FirstName = dictionary["FirstName"],
LastName= dictionary["LastName"]
}
return toRet;
}
public static IDictionary<string, string> GetAuthCookieData(HttpContextBase executingContext)
{
HttpCookie toCheck = executingContext.Request.Cookies[FormsAuthentication.FormsCookieName];
FormsAuthenticationTicket decrypted = FormsAuthentication.Decrypt(toCheck.Value);
string userData = decrypted.UserData;
return userData.ToDictionary<string, string>();
}
扩展 DefaultModelBinder 应该很简单,只是不要忘记在 Global.asax 中注册它。网上有很多关于如何做到这两点的文章。
对于您的问题,我建议将您的价值存储在 HTTPCOntext.Current.Session
首先创建一个这样的类
public class CurrentCustomer
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string Email { get; set; }
private string _Token;
public string Token
{
get
{
return _Token;
}
set
{
_Token = value;
}
}
}
然后在用户登录后(意味着当用户被授权时)获取所有需要的数据填充您的 CurrentCustomer 对象,然后像这样创建您的 Seeion
HttpContext.Current.Session[CurrentCustomer] = CurrentCustomer;
现在,无论您需要该值,请创建您的 CUrrentCUstomer 对象。
CurrentCustomr obj = ((CurrentCustomer)HttpContext.Current.Session[CurrentCustomer]);
这就是你所需要的。
您可以使用所需的所有参数存储 JSON 字符串:
{name:"NAME",id:"IDENTIFIER",email:"EMAIL"}
然后在还原时解析它。