将自定义用户信息存储在身份验证票证中而不是成员资格提供程序中

时间:2009-04-21 19:18:45

标签: session forms-authentication cookies membership roles

我一直在考虑实现一个基于SQL Server的自定义成员资格提供程序,我的一个问题是membershipUserObject是在GUID上键入的。由于我使用现有ID作为角色和用户数据的关键,因此这提出了一个有趣的问题。

如果我想在网络会话中保留我自己的ID而不经常转发到数据库,我希望您使用哪个选项 - 或者是否还有其他选项我没有考虑过。我知道,默认情况下,登录控件使用成员资格对象的用户名创建表单身份验证cookie。所以 - 我可以:

  1. 实施登录控件的Logging_In方法,将我的字段手动添加到身份验证cookie
  2.   

    if(Membership.ValidateUser(Login1.UserName,Login1.Password))      {      FormsAuthenticationTicket ticket = new      的FormsAuthenticationTicket(      1,      Login1.UserName,      DateTime.Now,      DateTime.Now.AddMinutes(30),      Login1.RememberMeSet,

         

    “某些自定义数据要存储在故障单中....”,//用户数据,      在这种情况下的角色      FormsAuthentication.FormsCookiePath);

         

    string hash = FormsAuthentication.Encrypt(ticket);      HttpCookie cookie =新的HttpCookie(      FormsAuthentication.FormsCookieName,      散列);

         

    if(ticket.IsPersistent)cookie.Expires = ticket.Expiration;

         

    Response.Cookies.Add(饼干);

    1. 创建一个自定义的MembershipUser对象,该对象继承自MembershipUser并提供我的额外属性。我还是要以某种方式坚持下去(在Session?eww ..)

    2. 创建一个自定义配置文件提供程序,其中包含会话中的额外字段和缓存。然而,这似乎有点像矫枉过正,对于我实际缓存的几个字段。

    3. 这里的最佳做法是什么?我读过无数篇文章,表单中的额外数据似乎是目前为止最好的。

1 个答案:

答案 0 :(得分:0)

MembershipUser.ProviderUserKey属于object类型,使用我们将其强制转换为Guid的默认提供程序以便使用它。

由于您使用的是自定义成员资格提供程序,因此当您从数据库中检索用户时,无法使用int(或您的id所属的任何类型)填充MembershipUser.ProviderUserKey吗?当然,每次要使用它时,都必须将MembershipUser.ProviderUserKey强制转换为int。