を発生することがありますかわかりません
セッションと認証の両方のステータスを管理するためにクライアント側のCookieが使用されています。サーバーは、認証/セッションのみを無効にすることができます。実際にユーザーを直接「ログアウト」することはできません。なぜなら、そのサーバーは直接的なサーバー制御下にないからです。つまり、特定のユーザーをログアウトする必要があると言うメッセージを設定することができますが、そのユーザーは実際にはになりません。はログアウトしてから別の要求が行われ、その時のユーザの状態の変化。
セッションでは、スライドタイムアウトが使用されます。これは、のいずれかの要求を意味します。クライアントはセッションのタイムアウトをリセットします。つまり、30秒ごとにセッションステータスを長時間ポーリングすると、有効期限切れのセッションが有効期限切れになります。
セッションは意図的に匿名化されています。セキュリティ上の理由から、クライアントのセッションへの唯一のリンクは、セッションIDを持つCookieです。これにより、成功した攻撃でクッキーを必須コンポーネントにすることで、特定のレベルのセッションハイジャックを防ぐことができます。 Secure
トークンのようなものであれば、もちろんサイト上でSSLを利用することで、割り当てられたクライアント以外のコンテキストでそのCookieが使用できなくなるのを効果的に防ぐことができます。長いと短いことは、どのセッションがそのユーザーと直接接触していない特定のユーザーに属しているか把握する方法が実際にはないことです。
キャッシュは本質的に揮発性です。特定のキーがある期間の存続期間を持つ必要があると言うことができますが、それは単に示唆にすぎません。キャッシュされたアイテムが破壊される可能性のあるさまざまな要因があります。
このことを考えれば、別の方向からアプローチする必要があります。私の提案は、一般的な意味でログイン/セッションを追跡する別のテーブルを持つことです。基本的に一種のログになります。ユーザーがログインしたり、新しいセッションを作成したりすると、このデータベースにレコードを追加します。ユーザーの認証またはセッションの有効期限が切れた場合は、適切なレコードを更新します。ユーザーが意図的にログアウトした場合は、レコードを削除するか、それ以外の場合は非アクティブとしてマークします。あなたの管理者が行く限り、彼らはこのテーブルを管理し、レコードを非アクティブとして削除またはマークします。
次に、このテーブルを考慮してサイトアクションの周りにロジックを追加する必要があります。このテーブルをチェックし、必要な操作を実行するアクションフィルタを作成することができます。たとえば、ユーザーが管理者によって「サインアウト」されている場合、アクションフィルタはこのテーブルから適切なレコードを読み取り、ユーザーがログアウトしたことを確認してから実際にユーザーに署名してその変更に影響を与えます。
長いポーリングでセッションが期限切れにならないため、基本的に独自のタイムアウトを管理する必要があります。たとえば、セッションが作成された時刻を「ログ」表に記録し、その後の各リクエスト(AJAXを含む)で現在時刻と比較することができます。繰り返しますが、この目的のためにアクションフィルタを使用することもできます。タイムアウトに基づいてセッションが「期限切れ」になっている場合は、手動でそのユーザーのセッションを破棄できます。
このように追加や説明が必要なことはたくさんありますが、これはうまくいけば作業のよいフレームワークになります。
セッションが期限切れになったかどうかをクライアント側が知るためには、アクティブなセッションを確認するためにajax呼び出しを行う必要があります。 –
また、ユーザーがブラウザを閉じたときにセッションをクリアするには、これもポーリングを必要とします。 –
@RyanSearleあなたは何がポーリングされているのか、少なくとも私に説明されている場所へのリンクを教えてくれますか?ありがとうございました –