私のアプリでは、管理者がユーザー アカウントを一時停止/一時停止解除できます。これは次のコードで行います。
MembershipUser user = Membership.GetUser(Guid.Parse(userId));
user.IsApproved = false;
Membership.UpdateUser(user);
上記はユーザーを一時停止するのには有効ですが、セッションは取り消されません。その結果、一時停止されたユーザーは、セッションクッキーが残っている限り、アプリケーションに引き続きアクセスできます。修正方法/
ベストアンサー1
セッションの「外部」からセッションを破棄する方法はありません。ページが読み込まれるたびにデータベースをチェックし、アカウントが無効になっている場合はサインアウトする必要があります。HttpModule を使用してもこれを実現できます。そうすれば、少しすっきりします。
例えば:
public class UserCheckModule : IHttpModule
{
public void Init(HttpApplication context)
{
context.PreRequestHandlerExecute += new EventHandler(OnPreRequestHandlerExecute);
}
public void Dispose() {}
private void OnPreRequestHandlerExecute(object sender, EventArgs e)
{
// Get the user (though the method below is probably incorrect)
// The basic idea is to get the user record using a user key
// stored in the session (such as the user id).
MembershipUser user = Membership.GetUser(Guid.Parse(HttpContext.Current.Session["guid"]));
// Ensure user is valid
if (!user.IsApproved)
{
HttpContext.Current.Session.Abandon();
FormsAuthentication.SignOut();
HttpContext.Current.Response.Redirect("~/Login.aspx?AccountDisabled");
}
}
}
これは完全な例ではなく、セッションに保存されたキーを使用してユーザーを取得する方法は調整する必要がありますが、これで開始できるはずです。ユーザー アカウントがまだアクティブであることを確認するために、各ページの読み込み時に追加のデータベース チェックが必要になりますが、この情報を確認する他の方法はありません。