1

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

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

  1. 实现登录控件的 Logging_In 方法,手动将我的字段添加到身份验证 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);

字符串哈希 = FormsAuthentication.Encrypt(ticket); HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, hash);

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

Response.Cookies.Add(cookie);

  1. 创建一个自定义 MembershipUser 对象,该对象继承自 MembershipUser 并提供我的额外属性。我仍然必须以某种方式坚持它(在会话中?eww ..)

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

这里的最佳做法是什么?我已经阅读了无数文章,并且表单票中的额外数据似乎是迄今为止最好的。

4

1 回答 1

0

MembershipUser.ProviderUserKey 是对象类型,使用默认提供者我们将其转换为 Guid 以便使用它。

由于您使用的是自定义会员提供程序,当您从数据库中检索用户时,您不能使用 int(或您的 id 的任何类型)填充 MembershipUser.ProviderUserKey 吗?当然,每次您想使用它时,您都必须将 MembershipUser.ProviderUserKey 转换为 int。

于 2009-04-21T19:38:24.417 回答