1

カスタム SQL Server ベースのメンバーシップ プロバイダーの実装を検討してきましたが、私の問題の 1 つは、membershipUserObject が GUID に基づいていることです。ロールとユーザー データのキーとして既存の ID を使用しているため、これには興味深い問題があります。

データベースに頻繁にアクセスすることなく Web セッションで自分の ID を維持したい場合に、どのオプションを使用するか、または私が検討していない別のオプションがあるかどうかについて、意見をお聞かせください。デフォルトでは、ログイン コントロールは、メンバーシップ オブジェクトのユーザー名を使用してフォーム認証 Cookie を作成することを知っています。だから - 私はできる:

  1. ログイン コントロールの Logging_In メソッドを実装して、自分のフィールドを認証 Cookie に手動で追加します。

if (Membership.ValidateUser(Login1.UserName, Login1.Password)) { FormsAuthenticationTicket チケット = 新しい FormsAuthenticationTicket( 1, Login1.UserName, DateTime.Now, DateTime.Now.AddMinutes(30), Login1.RememberMeSet,

"いくつかのカスタム データがチケットに保存したい....", // ユーザー データ、この場合はロール FormsAuthentication.FormsCookiePath);

文字列ハッシュ = FormsAuthentication.Encrypt(チケット); HttpCookie cookie = new HttpCookie( FormsAuthentication.FormsCookieName, hash);

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

Response.Cookies.Add(クッキー);

  1. MembershipUser から継承し、追加のプロパティを提供するカスタム MembershipUser オブジェクトを作成します。私はまだそれを何らかの形で永続化する必要があります(セッションで?えーと..)

  2. 追加のフィールドを含むカスタム プロファイル プロバイダーを作成し、セッションでそれをキャッシュします。ただし、実際にキャッシュするいくつかのフィールドについては、これはやり過ぎのように思えます。

ここでのベストプラクティスは何ですか? 数え切れないほどの記事を読みましたが、フォーム チケットの追加データは今のところ最高のようです。

4

1 に答える 1

0

MembershipUser.ProviderUserKey はオブジェクト型であり、デフォルトのプロバイダーを使用して、これを Guid にキャストして使用します。

カスタム メンバーシップ プロバイダーを使用しているため、データベースからユーザーを取得するときに、MembershipUser.ProviderUserKey に int (または ID の型) を設定できませんか? もちろん、使用するたびに MembershipUser.ProviderUserKey を int にキャストする必要があります。

于 2009-04-21T19:38:24.417 に答える