9

これが反応固有の質問であるかどうかは正確にはわかりませんが:

サーバー側レンダリングでreact / reduxスタックを使用してアプリケーションを開発しています。ユーザーがログインすると、1 つは ID 用、もう 1 つはブラウザーでのセッション用 (有効期限付き) の 2 つの Cookie を受け取ります。問題は、ユーザーがページを更新すると状態がリセットされ、セッション情報が失われることです (基本的に、状態にいくつかの変数を設定して、ユーザーがログインしていることを示します)。

問題は、この状況を管理し、ページが更新されてもユーザーがログインしたままにする方法です。サーバー側のレンダリングを完全に外に出し、ページが最初にレンダリングされるときにクライアント側で有効期限が切れていないセッション ID Cookie をチェックし、セッションがまだ生きている場合はその状態にいくつかの変数を設定することを考えています。 -それ以外の場合はその逆。

これは安全なアプローチのように見えますか? それを行うより良い方法はありますか?

4

1 に答える 1

5

同様の問題がありました。個人的には、Cookie をチェックして、できればセッションの UI に再登録しても問題はないと思います。サーバーは適切な Cookie によって保護されています。

ただし、私の場合、Cookie はhttp-only. 結局、私は次の解決策に行かなければなりませんでした:


ユーザーが最初に正常にログインしたら、「sessionStorage」インスタンスを作成して、アクティブなセッションがあることを示します。

window.sessionStorage.setItem(sessionKey, stringifiedUserToken);

ページが更新された場合は、このセッション アイテムを確認し、アクティブなセッションを再登録します。

const activeSession = window.sessionStorage.getItem(sessionKey);
if (activeSession) {
  // fire register user session action
}

ユーザーがログアウトした場合は、セッション ストレージ トークンを強制終了します。


すべてのサーバーとの対話には、引き続き渡される Cookie が必要であるため、これは純粋にフロントエンドの問題です。

セッション ストレージはブラウザ セッションの終了時にクリアされるため、この素朴なアプローチは「永続的な」セッションでは機能しない可能性があります。ただし、優れたブラウザー サポートがあります: http://caniuse.com/#search=sessionStorage

于 2016-05-31T11:52:16.063 に答える