0

(ユーザー名 textBox - パスワード textBox ) と [Remember Me CheckBox] オプションを持つ asp.net ログイン Web フォームがあります。ユーザー ログイン時に以下のコードを実行します。

if (provider.ValidateUser(username, password))
{
    int timeOut = 0x13;
    DateTime expireDate = DateTime.Now.AddMinutes(19.0);
    if (rememberMeCheckBox.Checked)
    {
        timeOut = 0x80520;
        expireDate = DateTime.Now.AddYears(1);
    }

    FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(username, true, timeOut);
    string cookieValue = FormsAuthentication.Encrypt(ticket);
    HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, cookieValue);
    cookie.Expires = expireDate;
    HttpContext.Current.Response.Cookies.Add(cookie);

    AddForLogin(username);
    Response.Redirect("...");
}

ユーザーが認証された後のコードのように、メソッドを呼び出してdbにログインしたことを記録しますAddForLogin(username);
しかし、ユーザーがログイン時に私を記憶することを選択した場合、Cookieを使用するため、このログインメソッドが実行されないときはいつでもサイトにアクセスしようとします...だから私は多くの質問があります:

1-これはログイン操作をログに記録するための最良の方法ですか、それとも他に良い方法はありますか?
2-私の場合、ユーザーが選択したことを覚えている場合にログイン操作をログに記録する方法は?

4

5 に答える 5

0

ログイン操作を実装する最善の方法は、ログイン設計を実装することです。組み込み機能とカスタム情報のログを使用しているように見えます。

ログイン情報をログに記録するために、プロバイダーをカスタマイズできます。実際、いくつかのデータベースの変更がありますが、コード全体を変更せずにストアド プロシージャで処理できます。たとえば、できるだけ多くの情報を保持する新しいテーブルを作成します。ログイン操作を含む希望(つまり、ユーザーがどのようにログインするか、それは初めてですか、それともユーザーがCookie によってログインするように「私を記憶する」オプションをすでに選択していますか)

よろしく
マイラ

于 2010-10-11T13:04:54.590 に答える
0

他のすべての回答を読んだ後の私の意見は次のとおりです。

以下は、パフォーマンスを考慮した私の考えです。

  1. ログイン ログの間隔設定を作成します。たとえば、12 時間または 24 時間 (任意) を指定します。この設定は、web.config appSettings に保存できます。値が小さいほど、パフォーマンス ヒットが高くなります。

  2. ユーザーがログイン ページで手動で正常にログインしたら、それをデータストアに記録し、現在の日時 (最終ログイン日時) で Cookie を設定します

  3. ユーザーがページ リクエストを行うたびに、Cookie に保存されている最終ログイン日時と現在のリクエスト日時の差を比較します。差が設定で指定された間隔よりも小さい場合は、ログに記録しません。それより大きい場合は、Cookie の値を現在の日時に更新し、ログインをデータストアに記録します。このステップは、パフォーマンスへの影響を減らすためのものです。

于 2010-10-25T11:27:46.013 に答える
0

私が使用したあるアプリケーションで最終的に行ったSession_Start()ことは、ログインしているかどうかをテストし、そこでログを記録することでした。これにより、ログイン Cookie がまだ有効であるためにログインが成功したユーザーがキャプチャされることがわかりました (そのため、明示的にログインする必要はありませんでした)

これが通常のログインにどのような影響を与えるかをテストして、2 回ログに記録していないことを確認する必要がありますが、それは簡単に理解できます。私のアプリは実際には、最後のログインが 5 分以内のログインのログを除外しますが、これは、そこにあるレコードの数も制限するためです。

于 2010-10-23T20:22:06.537 に答える
0

現在、2 つのケースを区別するのに十分な情報がありません。あなたが望むことを行う最も簡単な方法は、ユーザーがログインしたときに一時 Cookie を追加し、ページ クラスで一時 Cookie が存在しない場合は、remember me オプションを使用することだと思います。次に、これをログに記録し、一時 Cookie を設定できます。

于 2010-10-19T18:09:53.533 に答える
-1

あなたが達成したいと思っていることを私が理解しているなら、おそらくあなたのアプリケーションクラス( global.asax.cs)のFormsAuthentication_OnAuthenticateはログインを記録するのに適切な場所でしょう?

于 2010-10-24T20:28:51.567 に答える