1

昨日、この問題を解決する方法を考えていました。ユーザーについて私が与えたりチェックしたりすることはすべて、彼の ProviderUserKey (ID) に依存しているためです。

だから私は次のような静的関数を1つ作りました

public static Guid GetUserID()
{
    string UserID = string.Empty;

    if(HttpContext.Current.Session["UserID"] != null)
    {
        UserID = HttpContext.Current.Session["UserID"].ToString();
    }


    if(!string.IsNullOrEmpty(UserID))
    {
        return new Guid(UserID);
    }

    UserID = Membership.GetUser().ProviderUserKey.ToString();
    HttpContext.Current.Session["UserID"] = UserID;
    return new Guid(UserID);
}

このクラスの主なポイントは、データベース接続を減らしてユーザー ID を確認/取得することです。

この機能に関する私の問題は、これが機能していないことではありません。私の問題は、ログインしているユーザーがログアウトして別のアカウントでログインした場合はどうなるかということです。

または、ログイン時にセッション値を追加し、ログアウト時にセッション値をクリアすることをお勧めしますか?

この種の「ユーザーIDの取得」に関する他の問題はどこにありますか?

4

2 に答える 2

0

ユーザーをログアウトすると、セッションも強制終了されます。別のユーザーとしてログインすると、セッションも再初期化されます。

セッションとフォーム認証のタイムアウト(フォーム認証を使用していると仮定)を相互に同期させておく必要があることに注意してください。

ASP.NETでフォーム認証タイムアウト例外を処理するにはどうすればよいですか?

これは、セッションをフォーム認証トークンと一致させるのに役立ちます。次に、ログアウト時にセッションを強制終了し、ログイン時にセッションを初期化する必要があります。

もう1つの方法は、このキーをキャッシュする独自のメンバーシッププロバイダーを実装して、dbヒットが絶えないようにすることです。

于 2012-06-04T15:25:41.207 に答える
0

ProfileProvider を使ってみましたか?

特別なプロパティを使用およびカスタマイズできます。これは、各ユーザーのセッションによって管理されます。

値を取得する例:

HttpContext.Profile.GetPropertyValue["CustomProperty"]

このビデオでは、それを実装、作成、構成、および使用する方法を学ぶことができます...

http://www.asp.net/web-forms/videos/how-do-i/how-do-i-create-a-custom-profile-provider

于 2012-06-04T15:11:04.747 に答える