2017-04-18 24 views
0

誰かのセッションを強制終了し、それらをMVCアプリケーションからログアウトする方法についてアドバイスできますか? 私の現在の計画は次のとおりです。SessionsCacheをロードするためのアプリの起動時にはユーザーのセッションを終了し、インターフェイスメニューからログアウトしてください

  1. すると、ユーザのログイン - tblSessionsに彼のセッションを保存し、部分的に(キャッシュをリロードすることが呼び出しにすることなく、その中にセッションを追加DB)は、Ajaxは検証する
  2. 30秒ごとに私はセッションか
  3. を持っているかどうかを管理者がキャッシュ内のすべてのアクティブなセッションを含むインタフェース・ツールを持つことになりますし、彼は彼がキャッシュとDBから削除するセッションを殺すとき
  4. 次のajax calでLユーザーログアウトが正常にキャッシュ内のセッションとDBが
  5. を削除する場合、ユーザーが文句を言わないのセッションを持っていると
  6. をlogoutedことになるすべての30分がキャッシュ上の完全なリロードが

に行われることになるとお考えください私のアプリケーションにはOnActionExecuting()オーバーライド機能があり、ユーザがセッションを持っているかどうかをチェックし、ログアウトしていなければチェックします。 しかし、これはアクションの実行時にのみ発生し、ユーザーがどこからでもクリックしないと(afk)ホームページにリダイレクトされません。 (多分セッションを確認するためのAJAX呼び出しが冗長で考える?)

も、私は彼がログアウトボタンを使用せずに、ブラウザ/タブを閉じたときにユーザーセッションをクリアしたいが、私はどのようにこれは

+0

セッションが期限切れになったかどうかをクライアント側が知るためには、アクティブなセッションを確認するためにajax呼び出しを行う必要があります。 –

+0

また、ユーザーがブラウザを閉じたときにセッションをクリアするには、これもポーリングを必要とします。 –

+0

@RyanSearleあなたは何がポーリングされているのか、少なくとも私に説明されている場所へのリンクを教えてくれますか?ありがとうございました –

答えて

1

を発生することがありますかわかりません

  1. セッションと認証の両方のステータスを管理するためにクライアント側のCookieが使用されています。サーバーは、認証/セッションのみを無効にすることができます。実際にユーザーを直接「ログアウト」することはできません。なぜなら、そのサーバーは直接的なサーバー制御下にないからです。つまり、特定のユーザーをログアウトする必要があると言うメッセージを設定することができますが、そのユーザーは実際にはになりません。はログアウトしてから別の要求が行われ、その時のユーザの状態の変化。

  2. セッションでは、スライドタイムアウトが使用されます。これは、のいずれかの要求を意味します。クライアントはセッションのタイムアウトをリセットします。つまり、30秒ごとにセッションステータスを長時間ポーリングすると、有効期限切れのセッションが有効期限切れになります。

  3. セッションは意図的に匿名化されています。セキュリティ上の理由から、クライアントのセッションへの唯一のリンクは、セッションIDを持つCookieです。これにより、成功した攻撃でクッキーを必須コンポーネントにすることで、特定のレベルのセッションハイジャックを防ぐことができます。 Secureトークンのようなものであれば、もちろんサイト上でSSLを利用することで、割り当てられたクライアント以外のコンテキストでそのCookieが使用できなくなるのを効果的に防ぐことができます。長いと短いことは、どのセッションがそのユーザーと直接接触していない特定のユーザーに属しているか把握する方法が実際にはないことです。

  4. キャッシュは本質的に揮発性です。特定のキーがある期間の存続期間を持つ必要があると言うことができますが、それは単に示唆にすぎません。キャッシュされたアイテムが破壊される可能性のあるさまざまな要因があります。

このことを考えれば、別の方向からアプローチする必要があります。私の提案は、一般的な意味でログイン/セッションを追跡する別のテーブルを持つことです。基本的に一種のログになります。ユーザーがログインしたり、新しいセッションを作成したりすると、このデータベースにレコードを追加します。ユーザーの認証またはセッションの有効期限が切れた場合は、適切なレコードを更新します。ユーザーが意図的にログアウトした場合は、レコードを削除するか、それ以外の場合は非アクティブとしてマークします。あなたの管理者が行く限り、彼らはこのテーブルを管理し、レコードを非アクティブとして削除またはマークします。

次に、このテーブルを考慮してサイトアクションの周りにロジックを追加する必要があります。このテーブルをチェックし、必要な操作を実行するアクションフィルタを作成することができます。たとえば、ユーザーが管理者によって「サインアウト」されている場合、アクションフィルタはこのテーブルから適切なレコードを読み取り、ユーザーがログアウトしたことを確認してから実際にユーザーに署名してその変更に影響を与えます。

長いポーリングでセッションが期限切れにならないため、基本的に独自のタイムアウトを管理する必要があります。たとえば、セッションが作成された時刻を「ログ」表に記録し、その後の各リクエスト(AJAXを含む)で現在時刻と比較することができます。繰り返しますが、この目的のためにアクションフィルタを使用することもできます。タイムアウトに基づいてセッションが「期限切れ」になっている場合は、手動でそのユーザーのセッションを破棄できます。

このように追加や説​​明が必要なことはたくさんありますが、これはうまくいけば作業のよいフレームワークになります。

関連する問題