1

ユーザーのログイン詳細を作成しようとしています。

次の列をデータベース テーブルに格納しています。

IPAddress, LoginTime, LogOutTime, LoginPlace

ユーザーが手動でログインおよびログアウトすると(Logoutボタンをクリックして) 、詳細を正常に取得できます

私の問題は、ユーザーがクリックLogoutしたり、セッションが期限切れになったり、ブラウザーを直接閉じたりしない場合に、レコードを追跡できないことです。

追跡するファイルのSession_Endイベントにコードを追加することを考えています。Global.asaxしかし、どうすればセッションを追跡できますか?

それは良い解決策ですか?

任意の提案をいただければ幸いです。

前もって感謝します。

4

3 に答える 3

0

ユーザーの IPAddress を保存する際に留意すべき点がいくつかあります。

  1. このサイトをイントラネット用に開発していて、IP アドレスが動的に割り当てられたマシンをユーザーが使用している場合、ロジックは間違いなくうまくいきません。
  2. インターネット用のサイトを開発している場合、取得する IP アドレスは ISP の IP アドレスです。これを回避するには、ある種の ActiveX を使用する必要があります (推奨されません)。
  3. それでも 2 を使用する場合は、1 にフォールバックすることを覚えておいてください。したがって、4 を使用することをお勧めします。
  4. IP アドレスに依存する Web アプリケーション用にコーディングしないか、このアプリケーションをイントラネット用に作成し、マシンに静的 IP アドレスを割り当てていることを確認してください。

そうは言っても、ログアウトせずにブラウザを閉じたときにユーザーをログアウトするという実際の問題に直面します。

  1. Web アプリケーションの一部である HTTP ベースの Web サービスを作成します。「ログアウト」という Web メソッドを公開し、javascript の Window.Close() イベントで AJAX を使用してこのメ​​ソッドを呼び出します。
  2. WebService を先に進めたくない場合は、Window.close() の javascript でログアウト Web ページを呼び出すことができます。
  3. 上記の 2 つの方法のいずれかを使用する場合でも、サーバー側のコードでセッション タイムアウトを設定することを忘れないでください。これが役立つことを願っています。
于 2013-04-13T08:42:32.190 に答える
0

たとえば、UpdateLastVisited などと呼ばれるコントローラー/アクション内に何らかのヘルパー メソッドを配置することによって?

UpdateLastVisited は次のようになります。

            UpdateLastVisited(this.User)
                {  
                       "UPDATE [dbo].[User] set LastVisited = @date WHERE Id = @userId";
                        AddParameters etc..
                 }
于 2013-04-13T08:26:30.907 に答える