2009-03-25 9 views
4

ユーザーが自分のサイトにログインすると、訪問日がデータベース(ユーザーテーブル)に記録されます。これは(カスタム)メンバーシッププロバイダーによって処理されます。しかし、ユーザが「私を覚えていますか?オプションを選択すると、その後の訪問時に(自然に)ログインするように求められません。この状況でメンバーシッププロバイダーが採用されていないため、最終ログイン日はデータベースで更新されません。「Remember Me」が設定されている場合、最終ログイン日を更新する方法は?

フォーム認証を使用すると、物理的にログインするのではなく、サイトを初めて訪れるたびに最後のログイン日が更新されるようにするにはどうすればよいですか?これを達成するために私が取り組むことができる出来事はありますか?

セッション状態は使用できません。開発中のWebサイトでは完全に無効になっています(セッションモジュールは削除されています)。

おかげ

答えて

2

私は(私は「私が覚えている」そうでない場合はどのように動作するかを見ることができない)Cookieを使用していると仮定しています。

ユーザーがログインすると、2つのクッキーを設定します.1つは永続的(Remember Meがチェックされている場合)、1つは一時的(このセッションのみ)です。 2番目の方法は、ユーザーの承認に使用する方法です。

したがって、ユーザーがログインする必要があるページで、セッションCookieを探します。見つかった場合は、通常通り続行します。見つけることができない場合は、永久的なクッキーが見つかった場合は、にログインしてログイン日をに設定し、セッションCookieを設定します。 (永続的なクッキーが見つからなければ、彼はログインしていない)。

+0

私はこれにバリエーションを付けました:ユーザーが最初に認証するときに非永続Cookieを作成します。後続の認証要求がインターセプトされ、Cookieが存在しない場合は作成され、最後のログインデータが更新されます。 –

0

あなたがASP.NET 2.0について話していると仮定します(メンバーシッププロバイダのコメントがあります)。

ユーザーが自動ログオンする必要があるかどうかを確認する場合は、メンバーシッププロバイダのGetUser関数を呼び出す必要があります。このGetUser関数は、ユーザーの活動日を更新するブール値をとります。 MSDN docs当たり

MembershipProvider.GetUser方法

ユーザことを示すために入力、一意のユーザ識別子とユーザのためLastActivityDate値を更新するかどうかを示すブール値として、とり現在オンラインです。 GetUserメソッドは、指定されたユーザーのデータソースから現在の値が移入されたMembershipUserオブジェクトを返します。ユーザー名がデータソースに見つからない場合、GetUserメソッドはnull(Visual BasicではNothing)を返します。

+1

迅速な返信をありがとう。私はASP.Net 3.5を使用しています。私は自分自身でクッキーをチェックしていません - .Netはそれを自動的に処理しています。私はどのように/どこで.Netがそのクッキーチェックを実行するステップにフックするか分からない。 –