0

私はUserテーブルを持っています。認証を使用Formsしており、ログオン用に次のコードがあります。

 public JsonResult LogOn(FormCollection form)
 {
        var agent = SiteUserRepository.CheckAgent(form["Email"], form["Password"]);
        if (agent == null)
            return Json(new
            {
                IsSuccess = false,
                Message = "Wrong email or password"
            });
        SiteUserRepository.UpdateLastLogon(agent.Email);

        FormsAuthentication.SetAuthCookie(agent.Email, true);
        ApplicationSession.CurrentUser = agent;

        return Json(new
            {
                IsSuccess = true
            });

 }

これは、オブジェクトApplicationSessionのラッパーです。Session

public static class ApplicationSession
{
    private const string _currentUser = "CurrentUser";
    public static SiteUser CurrentUser
    {
        get
        {
            var user = HttpContext.Current.Session[_currentUser];
            if (user != null)
                return (SiteUser)user;
            return null;
        }
        set
        {
            HttpContext.Current.Session[_currentUser] = value;
        }
    }

}

セッション タイムアウトは 1440 (24 時間) です。まさにこの値が必要です。たとえば、サイトでのユーザー ログイン。次に、このユーザーをDBから削除します。ユーザーは認証されます (もちろん、[ログオフ] をクリックしない場合)。これを解決するための最良のアプローチは何ですか?

4

2 に答える 2

1

クッキーを使用したい。コードで Cookie を確認する必要があり、Cookie が存在しない場合、または有効期限が切れている場合は、新しい Cookie を作成します。

これはあなたに良い例を示すと思います:

ログイン情報に基づく C# Cookie

http://www.beansoftware.com/ASP.NET-Tutorials/Cookies-ASP.NET.aspx

有効期限が 1 日のチェックボックス タイプの実装は、次のように行うことができます。

if (chBox.Checked)

      {
          HttpCookie myCookie = new HttpCookie("Cookie_Remember"); //new cookie object

          Response.Cookies.Remove("Cookie_Remember"); //This will remove previous cookie
          Response.Cookies.Add(Cookie_Remember); //This will create new cookie

          Cookie_Remember.Values.Add("UserInfo", txt_username.Text); //Add User Name 

        // You can add multiple values

          DateTime CookieExpir= DateTime.Now.AddDays(5); //Cookie life

          Response.Cookies["Cookie_Remember"].Expires = CookieExpir; //Maximum day of cookie's life       
      }
于 2012-12-25T03:53:47.450 に答える
0

解決策は、アプリケーションを介してリポジトリ/データベースからユーザーを削除することのみを許可することです。

ユーザーが削除されたら、強制的にログアウトします。

//Delete the user
SiteUserRepository.DeleteUser(agent);

//Log them out
FormsAuthentication.Signout();
于 2012-12-25T03:49:40.910 に答える