はい、できます。あなたは、FormsAuthenticationTicketのコンストラクタののuserdataフィールドでエンコードされた情報渡す:
FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(version,
name, issueDate, expirationDate, isPersistent, yourEncodedData);
string secureTicket = FormsAuthentication.Encrypt(ticket);
Response.Cookies.Add(
new HttpCookie(FormsAuthentication.FormsCookieName, secureTicket));
理想的には、これは、SSL接続を介して行われる必要がありますが、チケットクッキーは両方のHttpOnlyおよびSecure属性でマークする必要があります。値を取得するために、次に
、:
FormsIdentity id = (FormsIdentity)User.Identity;
FormsAuthenticationTicket ticket = id.Ticket;
string yourEncodedInfo = ticket.UserData;
また、単にフォームから認証チケットを分離し、独自のクッキーを設定することができます。
しかし、たとえ暗号化されていても、クッキーに直接パスワードを格納することは、セキュリティの観点からはお勧めできません。代わりに、セッション状態を使用します。
Session["password"] = password;
セッション状態はまた、クッキーを使用しますが、クッキー自体は、キーが含まれています。サーバーはキーを使用して、そのセッションに固有のキー/値のペアの辞書を取得します。このキー/値のペアは、サーバー上に残ります(または構成方法によってはDBにシリアル化されます)。
ユーザーが最初に認証されたときにセッション状態に保存できますか?メンバーシップセッションがセッション状態と同時に期限切れになることをどうやって確認しますか?私は彼らが私が信じている同期にとどまることが必要です。 –
@metalideath - はい、できるだけ早くそれらを保管してください。セッションが終了すると、ユーザーがCookieをクリアしてセッションの参照を失うか、またはサーバーがセッションをタイムアウトすると、ユーザーを再認証してセッションでパスワードを再度復元する必要があります。 – Omar
複数のサーバー環境でセッション状態が機能していますか? –