我一直在考虑实现一个基于SQL Server的自定义成员资格提供程序,我的一个问题是membershipUserObject是在GUID上键入的。由于我使用现有ID作为角色和用户数据的关键,因此这提出了一个有趣的问题。
如果我想在网络会话中保留我自己的ID而不经常转发到数据库,我希望您使用哪个选项 - 或者是否还有其他选项我没有考虑过。我知道,默认情况下,登录控件使用成员资格对象的用户名创建表单身份验证cookie。所以 - 我可以:
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(饼干);
创建一个自定义的MembershipUser对象,该对象继承自MembershipUser并提供我的额外属性。我还是要以某种方式坚持下去(在Session?eww ..)
创建一个自定义配置文件提供程序,其中包含会话中的额外字段和缓存。然而,这似乎有点像矫枉过正,对于我实际缓存的几个字段。
这里的最佳做法是什么?我读过无数篇文章,表单中的额外数据似乎是目前为止最好的。
答案 0 :(得分:0)
MembershipUser.ProviderUserKey属于object类型,使用我们将其强制转换为Guid的默认提供程序以便使用它。
由于您使用的是自定义成员资格提供程序,因此当您从数据库中检索用户时,无法使用int(或您的id所属的任何类型)填充MembershipUser.ProviderUserKey吗?当然,每次要使用它时,都必须将MembershipUser.ProviderUserKey强制转换为int。