2009-07-15 9 views
0

資格情報のセットは一度しか使用できないCMSを設計する必要があります。したがって、ユーザーが自分のコンピューターからログインしている場合、そのユーザーがログアウトするまで誰も自分の資格情報で別の場所からログインすることはできません。asp.netメンバーシップに対する適切な100%IsOnlineの実装

asp.netメンバシッププロバイダを使用して、IsOnlineメソッドは、タイムアウトウィンドウと最後のアクティビティの日付を反映するブール値を返します。これは私にとって実行可能な選択肢ではありません。ユーザーがログイン後にブラウザを閉じるだけであれば、IsOnlineは依然として真であるからです。しかし彼のセッションは破壊されます(彼はRemember Meを使用していないと仮定します)。もし彼がどこか他の場所にログインしようとすると、 "あなたはまだログインしています"と言います。

これを実行するための任意のハードと高速のオプションはありますか?

ログアウトすると「IsReallyOnline」がtrueに設定され、逆にログアウトすると、ユーザーは「Remembered」になります。このオプションには制限がありますが、クッキーを外し、ログアウトせずにブラウザを閉じ、次にsum1をブラウザに送り、彼がログインしているなど....)これは今のところ最も実行可能なようですか?

提案がありますか?

ありがとうございます。

答えて

1

あなたは本当にウェブの送金の外にあるものを求めています。 HTTPプロトコルは定義どおりに状態を保持しません。つまり、いつでもそのことを意味します。サーバーはクライアントがまだ存在するかどうかを知る必要はありません。ウェブサーバプログラミング言語の新しい/古い実装(例えば、php/asp.net mvc)は、ほとんどの場合、接続された/アクティブなクライアントに関するあらゆる状態を保存しないようにする。自問する

いくつかのものが含まれます:

はどのくらいのユーザーがポストバックを発生させずにページ上の「アクティブ」かもしれ? Javascriptベースのページでは、ユーザーが任意の種類のポストバックが発生する前に対話的にページを使用することができます。

ユーザーはプロキシサーバーまたはキャッシュサーバーを経由しますか?この場合、「異なる」ユーザーからの複数の要求が同じマシンから来る可能性があります。

アプリケーションを1台のマシンでのみ実行するのか、それともサーバーファームで実行するのでしょうか?ロードバランシング(たとえば)が異なるユーザーに複数のログインを許可する別のサーバーを割り当てないようにする必要があります。

同じマシンで2つの異なるブラウザを合法的に使用するユーザーはどうですか?これは許可されていますか?

ここで問題を示唆しているのは、要件に合っていない間違った技術を使用しようとしていることでしょうか?おそらくあなたのサーバーに直接接続を使用するクライアントアプリケーションを書くことは、より安全です " (はい、私はこれが大した面倒だと理解していますが、あなたの1人のユーザー/ 1回のログオンの必要性が絶対的であれば、この道を探ることができますか?あなたは、セッションがまだアクティブであることを示すためにX秒ごとにサーバーに要求を行うjavascriptのタイマーを試すことができます。http中心のソリューションの場合)

大丈夫ああ、Webソリューション

。ブラウザが開いていて、ネットワーク接続が有効である限り、これらの「ping」を取得する必要があります。セッションは、httprequestによって渡されたCookieによって開かれたままになります。

あなたは、クライアントがログインしようとするたびに、このプロバイダーを調べるアプリケーションオブジェクトまたはお好みのいくつかのメンバーシッププロバイダーのいずれかにユーザの詳細を保存するために「ピング」のページをコーディングすることができるでしょう。

このクラッシュしたブラウザが正規のユーザを長時間ロックアウトしないように、セッションやその他のメカニズムで比較的短いタイムアウトが必要になります。

注意:ユーザーがJavaScriptをオンにしていないと、これはひどく失敗しません(持っているとは思わないでください)

1

高速オプション:セッションとしてIsOnlineを保存します。 セッションが真であることを確認してから許可します。そうでない場合は、許可しないでください。

ユーザーがブラウザを閉じると、彼はセッション中にログアウトされます。

関連する問題