68

セッションタイムアウトのためのWeb.xmlでのセッション構成の本当の目的を理解しようとしています。

<!-- Session Configuration -->
<session-config>
        <session-timeout>60</session-timeout>
</session-config>

それでは、私の質問についてお話ししましょう。

私のアプリケーションは、インポートするレコードが数百万あるため、1時間以上かかる.txtファイルをインポート/アップロードしています。しかし、私のアプリケーションはまだ進行中の.txtファイルをインポートしていますが、セッションは1時間後にタイムアウトになります。このようなアプリケーションは、アプリケーションがバックグラウンドで何らかのタスクを実行しているため、タイムアウトしないようにする必要があります。

4

12 に答える 12

43

期限切れにならないセッション タイムアウトを設定することは望ましくありません。ユーザーが終了するたびにログアウト ボタンを押して、サーバーに負荷がかかりすぎるのを防ぐことができるからです (ユーザーの数とハードウェアによって異なります)。さらに、回避したいセキュリティ上の問題がいくつかあります。

サーバーがまだタスクを処理している間にセッションが無効になる理由は、クライアント側 (ユーザーのブラウザー) とサーバー側の間で http 要求などを介した通信がないためです。したがって、サーバーはユーザーの状態を知ることができず、ユーザーがアイドル状態であると見なし、 に設定された時間が経過するとセッションを無効にしますweb.xml

これを回避するには、いくつかの可能性があります。

  • タスクの実行中にバックエンドにpingを実行して、セッションにアクセスし、セッションが期限切れになるのを防ぐことができます
  • サーバーの内部を増やし<session-timeout>ますが、これはお勧めしません
  • 作業中にセッションに触れる(拡張する)専用スレッドでタスクを実行するか、スレッドが終了したときにユーザーに通知します

同様の質問がありました。このソリューションの一部をプロジェクトに適応させることができるかもしれません。これを見てください。

これが役立つことを願って、楽しんでください!

于 2013-03-13T11:16:01.253 に答える
39
<session-config>
    <session-timeout>-1</session-timeout>
</session-config>

セッションが期限切れにならない場合は、「-1」を使用できます。スレッドが完了するまでにかかる時間がわからないため。

于 2013-03-13T10:44:17.400 に答える
9

ファイルのアップロードが完了するまでサーバーとのセッションを維持するために、javascript を介して定期的に (60 秒ごとに 1 回など) AJAX Http 要求をサーバーに送信します。

于 2013-03-13T11:55:27.477 に答える
9

ハッキーな方法:

大量のアップ/ダウンロードが予想される場合は、プログラムでセッション タイムアウトを増やすことができます。

session.setMaxInactiveInterval(TWO_HOURS_IN_SECONDS)

プロセスが終了したら、タイムアウトをデフォルトに戻すことができます。

しかし..Java EEを使用していて、アップ/ダウンロードに1時間もかからない場合は、タスクを非同期で(JMSなどを介して)実行するのがより良い方法でした。

于 2013-03-15T17:39:36.927 に答える
8

質問に対する回答として多くのオプションが表示されますが、セッションが期限切れにならない場合は「-1」を使用できます。スレッドが完了するまでにかかる時間がわからないためです。例えば:

   <session-config>
        <session-timeout>-1</session-timeout>
    </session-config>

または、何らかの目的でタイムアウトを発生させたくない場合は、次のようにします。

<session-config>
    <session-timeout>0</session-timeout>
</session-config>

別のオプションとして、数値を 1000 などに増やすこともできます。bla、bla、bla などです。

ただし、本当に停止したい場合で、アプリケーションがユーザーに強制的にログアウトさせる必要がないと考える場合は、ログアウト ボタンを追加するだけで、ユーザーはいつ退出するかを決定できます。

強制的にログアウトする必要がなく、サーバーとコンピューターの速度とファイルのサイズに基づいて時間がかかる可能性のあるファイルをロードしている場合、問題を解決するためにできることは次のとおりです。

<!-- sets the default session timeout to 60 minutes. -->
   <!-- <session-config>
     <session-timeout>60</session-timeout>
   </session-config> -->

コメントするか削除するだけです!たんたららんたん、たんたん!

于 2014-10-07T19:24:52.707 に答える
8
<session-config>
        <session-timeout>-1</session-timeout>
</session-config>

上記のコード"60" stands for the minutes.では、セッションは後で期限切れに60 minutes.なりますので、もっと時間が必要な場合。説明されている例-1については、セッションが期限切れになることはありません。

于 2013-03-13T10:40:43.437 に答える
5

The docs says:

The session-timeout element defines the default session timeout interval for all sessions created in this web application. The specified timeout must be expressed in a whole number of minutes. If the timeout is 0 or less, the container ensures the default behaviour of sessions is never to time out. If this element is not specified, the container must set its default timeout period.

于 2015-10-27T19:03:46.117 に答える
3

この問題では、2 つの方法で時間を宣言できます。

1)ファイルの読み取りがその間に完了するまでに時間がかかりすぎます。

<session-config>
    <session-timeout> 1000 </session-timeout>
</session-config>

2)セッションの有効期限が切れることのない時間を宣言します。

<session-config>
    <session-timeout>-1</session-timeout>
</session-config>
于 2014-02-04T06:10:39.477 に答える
1

私がお勧めするもう 1 つのオプションは、大きなファイルを受け取るステートレスな別のアプリケーションを作成することです。メインアプリで、ファイルを受け入れる新しいウィンドウまたは iframe を開き、そのウィンドウを介して送信し、Javascript を使用してアップロードが開始されたら、ウィンドウまたは iframe を非表示にします。

于 2015-04-16T17:32:09.653 に答える
0

何らかの目的でタイムアウトを発生させたくない場合:

<session-config>
    <session-timeout>0</session-timeout>
</session-config>

タイムアウトはまったく発生しないはずです->無限

于 2013-03-13T10:45:48.520 に答える
-2

通常、リクエスト処理が行われているときにセッションは期限切れになりません。ファイル全体を読み取ってからWebコンテナを呼び出すLBなどが間にあると思います。

これにより、セッションの期限切れにつながる遅延が発生している可能性があります。

于 2013-03-13T17:55:12.660 に答える