单点登录ticket在redis中存储问题
世界只因有你
世界只因有你 2017-04-24 16:00:16
0
5
926

用户通过在单点登录服务器登陆,登录成功后,单点登录服务器分配给该用户一个ticket。然后单点登录服务器将该ticket做为key,用户名做为value,存储在redis中。通过判断该key是否是有效的来判断该用户会话有效。
后续会有服务通过向单点登录服务器发送一个ticket来验证该ticket是否有效,来判断该用户是否登录了。
但是这样会有个问题,某个用户肯能不停的登录,这样单点登录服务器每次都会将该ticket存储在redis中,虽然该ticket有过期时间,但有可能在短时间内在redis中写入大量的ticket。
不知这个有什么好的解决方法吗?

世界只因有你
世界只因有你

全員に返信(5)
PHPzhong

インターフェースへの悪意のある呼び出しについて話している場合、それはDDOS保護に関連しているため、私の答えは当てはまりません。
実際、この問題は、この機能を実行した人であれば誰でも遭遇することになります。つまり、ユーザーがログインしたと判断される場合、特に Cookie とセッションを使用するために実行されたわけではありません。異なるブラウザでログインすると、Cookie もセッションも役に立ちません。
そのとき私がやったのは、redis で別の関係 (ユーザー名-->チケット) を維持することで、ユーザー名に基づいて前のチケットを見つけて、ユーザーが繰り返しログインしたかどうかを判断できるようにすることでした。

いいねを押す +0
phpcn_u1582

まずこれに答えます。マシンへのログインをより困難にするために、ログイン時に確認コードを追加します。これは一つの方法ですが、他にも方法はあるのでしょうか?

いいねを押す +0
某草草

ログイン後、チケットはセッションまたはCookieを通じてユーザー側で記録され、ログアウト時にサーバーがチケットを取得してクリアするか、ユーザーが再度ログインしたときにサーバーがチケットをクリアできます。また、最後のチケットを取得して決定します。破棄するかどうかを決定する別の方法は、ユーザー ID をキー値として使用してチケットを保存することです

いいねを押す +0
Peter_Zhu

短時間に連続してログインする場合、手動操作であればredisが対応できなくなることはありませんのでご安心ください。

DDoS 攻撃の場合は、外部 (ルーター、ファイアウォール、HTTP サーバー、またはアプリケーション) に保護ポリシーを追加する必要があります。

アプリケーションでは、このような「異常なログイン」動作をどのように定義するかによって異なります。たとえば、短期間のログインを比較できるか (時間間隔はカスタマイズ可能)、ソースが一貫しているかどうかが異なります。 (例:ユーザーは5秒以内にログインする)地球上の10の異なる場所からログインする)、異常なログイン動作を判断した後、アプリケーションの機密性に応じて対処方法を決定できます(アカウントの禁止? IPをブロックしますか? 証拠を集めて警察に連絡してください:-)

いいねを押す +0
淡淡烟草味

すでにログインしているのに、なぜもう一度ログインさせたいのですか? ロジックに何か問題がありますか?

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!