2016-06-21 2 views
-2

コントローラのセッション属性が@SessionAttribute( "sample_dto")です。セッションがタイムアウトした後でも、私はsample_dtoで作業する必要があります。適切にこれを行う方法は何ですか。セッションがタイムアウトを取得したときにスプリングコントローラ@SessionAttributeとどうなるか

PS:セッションがタイムアウトになると、ブラウザはログイン画面にリダイレクトされます。私はそれを避け、セッションがタイムアウトする前の場所に戻す方法はありますか?

おかげで

+4

コードに起因する問題について質問するときに、人々が問題を再現するために使用できるコードを提供すると、より良い回答が得られます(最小限の動作例) – Alupotha

答えて

11

あなたの質問によると、私はあなたがセッション属性を必要としないと思います。別々のセッション の間で同じデータ項目にアクセスする必要があるためです。最も簡単な解決策は、通常のインスタンス変数を使用することです。あなたのコントローラーはデフォルトではシングルトンですから。 コントローラの範囲を変更せず、アプリケーションを再起動しないため、アプリケーションスコープと似ています。

このタスクがユーザー固有の場合(データ項目はユーザーごとに保持する必要があります)、クッキーを使用して一時的なユーザー状態を保存できます。 クッキーを設定するには、独自のHttpSessionListenerクラスを実装できます。また、sessionDestroyedメソッド内でクッキーを保存することもできます。 セッションが破棄される(タイムアウト)場合にのみ、この作業を行う必要があるためです。

データがはるかに大きい場合は、関連するユーザーを参照してデータベースにデータを保存できます。同じsessionDestroyedメソッドを使用できます。

関連する問題