4

MySQL を使用して C++ サーバーでセッションとタイムアウトを処理するためのベスト プラクティスは何ですか。

私の C++ サーバーはセッション GUID を生成し、Set-Cookie としてクライアント ブラウザーに送信します。

セッションをタイムアウトにする必要がありますか?

セッション GUID を MySQL ユーザー テーブルに保存する必要がありますか?

ユーザーが何かを行ったとき、テーブル内のタイムスタンプを更新する必要がありますか、それともセッションと最後のアクションを C++ サーバーに直接保存する必要がありますか?

セッション GUID の有効期限が切れないように、「ログイン状態を維持」をどのように処理すればよいですか? (これは大きなセキュリティ ギャップになる可能性があります)

4

1 に答える 1

1

C++ の部分についてはお手伝いできませんが、セッション (サーバー側) に関するいくつかのヒントを次に示します。

  • Session オブジェクトは、少なくとも

    • 最後にアクセスされた時間 (リクエストが行われた)
    • 現在の時間を最大アイドル時間 (セッションが期限切れと見なされるまでにアクセスが行われない最大時間) に追加することによって、アクセスされるたびに計算される有効期限。
  • アクセスするたびに、Session オブジェクトに格納されている有効期限が現在の時間と比較され、セッションが期限切れかどうかが判断されます。その場合、セッションは無効になり、Session オブジェクトは Session Manager のキャッシュから削除されます。Web サーバーの場合、302 がクライアントに返され、Cookie の有効期限が切れます。

  • セッション マネージャは、メモリ内またはディスクに保持されるセッション キャッシュを実装できます。ディスクに永続化することで、サーバーの再起動時にセッションを回復できます。キャッシュには分散キャッシュ (Memcache など) を使用することもできます。これにより、クラスター内の複数のサーバーがセッション オブジェクトを共有し、サーバー間で負荷分散を行うことができます。

于 2013-03-28T08:55:22.323 に答える