6

デフォルトでは、セッションの有効期限は 20 分です。

更新: ブラウザーが閉じられるまで、セッションの有効期限が切れないようにします。

Update2: これは私のシナリオです。ユーザーがサイトにログインします。サイトの周りを再生します。コンピューターを離れてシャワーを浴びます (>20 分 ;))。コンピューターに戻ってきて、遊ぶことができるはずです。彼はブラウザーを閉じます。これにより、セッション Cookie が削除されます。次に新しいブラウザ インスタンスからサイトにアクセスするときは、再度ログインする必要があります。

PHP では、php.ini の session.cookie_lifetime をゼロに設定して、これを実現できます。

4

9 に答える 9

6

セッションを 20 分を超えて延長する場合は、IIS 管理者を使用してデフォルトを変更するか、web.config ファイルで設定できます。たとえば、web.config でタイムアウトを 60 分に設定するには、次のようにします。

<configuration>
  <system.web>
    <sessionState timeout="60" />
    ... other elements omitted ...
  </system.web>
  ... other elements omitted ....
</configuration>

次のコードを使用して、特定のユーザーに対して同じことを行うことができます。

Session.Timeout = 60

どちらの方法を選択しても、タイムアウトを適切と思われる値に変更して、ユーザーが他のことを実行しながらセッションを維持できるようにすることができます。

もちろん、マイナス面もあります。ユーザーにとっては、ブラウザを無人のままにしておくと、他の誰かがブラウザを使用し始めたときにログインしたままになるというセキュリティ上の問題が発生する可能性があります。サーバーのメモリ使用量の問題があります。セッションが長く続くほど、一度に使用するメモリが増えます。それが重要かどうかは、サーバーの負荷によって異なります。

合理的な延長タイムアウトを推測したくない場合は、すでに提案されている他の手法のいずれかを使用する必要があります。ブラウザーで実行されている JavaScript を使用して、定期的にサーバーに ping を送信したり、ページがアンロードされたときにセッションを破棄したりする必要があります。 (もちろん、ユーザーがサイトの別のページに移動しないことが条件です)。

于 2008-09-18T16:48:29.643 に答える
3

短いセッションタイムアウト(たとえば5分)を設定してから、Javascriptを使用して2分ごとにXmlHttpRequestを起動するか、ページを指す非表示のiframeを使用して、サーバーを定期的にポーリングするようにページを取得できます。 2分。

ブラウザが閉じると、セッションを存続させるものがないため、セッションはその後すぐにタイムアウトします。

于 2008-09-18T16:10:57.080 に答える
3

これは新しい問題ではありません。セッションが終了する可能性があるすべての方法を把握したい場合に対処しなければならないシナリオがいくつかあります。それらのいくつかの一般的な例を次に示します。

  1. ブラウザ インスタンスまたはタブが閉じられています。
  2. ユーザーは、同じブラウザー インスタンスまたはタブを使用して Web サイトから離れます。
  3. ユーザーはインターネットへの接続を失います (これには、ユーザーのコンピューターへの電力損失またはその他の手段が含まれる可能性があります)。
  4. ユーザーがコンピューターから離れます (または、他の方法でサイトとのやり取りを停止します)。
  5. サーバーの電源が失われるか、再起動します。

最初の 2 つの項目は、サーバーに情報を送信するクライアントによって処理される必要があります。通常、javascript を使用して、セッションをすぐに期限切れにするログアウト ページに移動します。

3 番目と 4 番目の項目は、通常、セッション状態のタイムアウトを設定することによって処理されます (任意の時間に設定できます)。使用する時間は、ユーザーがサーバーに負担をかけずにサイトを使用できる値を見つけることに基づいています。非常に大まかな経験則は、30 分プラスまたはマイナス 10 分です。ただし、適切な値はおそらく別の投稿の主題である必要があります。

5 番目の項目は、セッションの保存方法に基づいて処理されます。状態で保存されたセッションは、コンピューターの RAM にあるため、再起動後は存続しません。データベースまたは Cookie に保存されたセッションは、再起動後も存続します。適切と思われる方法でこれを処理できます。

この問題が以前に発生したときの私の限られた経験では、セッション タイムアウトを許容値に設定するだけで十分であると判断されました。ただし、それは可能です。

于 2008-09-18T16:16:34.383 に答える
1

これがデフォルトです。セッションがあると、ブラウザを閉じると自動的に削除される「セッション Cookie」にセッションが保存されます。

2 つのブラウザー セッション間でセッションを保持する場合は、機能で Cookie.Expired を日付に設定する必要があります。

あなたが話しているセッションはクライアントではなくサーバーによって保存されるため、あなたが望むことはできません。

ただし、ASP.NET サーバー側セッションを使用しないことを検討し、代わりに Cookie のみに依存してください。

于 2008-09-18T16:01:22.517 に答える
1

残念ながら、Web の明示的な性質と、Web サイト サーバーとユーザーのブラウザーの間に永続的なリンクがないという事実により、ユーザーがいつブラウザーを閉じたかを知ることは不可能です。実装できるイベントと JavaScript (onunload など) があり、これらを使用してサーバーにコールバックし、セッションを「強制終了」することができます。Session.Abandon();

web.config 内でセッションのタイムアウトの長さを設定できます。このタイムアウトは、ユーザーのブラウザーによってサーバーへの最後の呼び出しが行われてからの時間に基づいていることに注意してください。

ブラウザのタイムアウトは追加されませんでした。

于 2008-09-18T16:07:20.273 に答える
0

ああ、あなたは質問を書き直しました。

JavaScriptが生きている限り、それは絶対に実現可能です。任意の時限 ajax を使用します。プロトタイプ ライブラリhttp://www.prototypejs.org PeriodicalExecutor または ajax + タイマー プラグインを使用した jQuery で確認してください。エグゼキュータが時々呼び出すダミー ページをセットアップします。これにより、エグゼキュータがログアウトする (同時に ajax タイマーを強制終了する) か、ブラウザを閉じる (つまり、エグゼキュータがとにかく強制終了される) 場合を除き、セッションは常に有効になります。

于 2008-09-19T09:33:22.270 に答える
0

質問の意図を誤解している場合は修正してください。ただし、根本的な質問は、ユーザーがブラウザを閉じたときにセッションを強制的に終了する方法についてではなく、ブラウザが閉じるまでセッションが終了しないようにする方法についてのようです。

これに対する本当の答えは、セッションを使用して何をしているのかを再評価することだと思います。それらを使用して状態を維持している場合は、運が悪い可能性があるという他の回答に同意します。

ただし、推奨されるアプローチは、ブラウザを閉じると有効期限が切れる Cookie など、ブラウザ セッションと同じスコープを持つ永続的な状態メカニズムを使用することです。その Cookie には、最後のリクエスト以降に有効期限が切れた場合に、サーバー上でセッションを再開するのに十分な情報が含まれている可能性があります。比較的短いセッション タイムアウト (5 ~ 10 分) と組み合わせると、サーバー リソースの使用と、ユーザーがサイトを継続的に "再起動" しないようにすることとの最適なバランスが得られると思います。

于 2008-09-18T16:44:15.380 に答える
0

ウィンドウを閉じる時点でクライアントとサーバーの間で何らかの方法で通信しない場合、セッションを明示的にクリアする方法はないため、ウィンドウを受信した時点でセッションをクリアするために特別な URI 要求を送信することを期待します。メッセージを閉じます。

私の Javascript は、それを行うための実際の指示を与えるには十分ではありません。ごめん :(

于 2008-09-18T16:04:01.870 に答える
0

HTMLクライアントの応答方法を制御できないため、できません。

実際、なぜそうする必要があるのですか?再び使用するためにセッションを取得できない限り、セッションはその 20 分後に期限切れになります。リソースが問題になる場合は、より積極的なセッションの有効期限を設定するか (ほとんどのホスティング会社がそうしていましたが、これは非常に面倒です)、セッションで使用するオブジェクトを減らします。あらゆる種類のオブジェクトを避けるようにしてください。代わりに、それらを取得するためのキーを保存するだけです。これは、大きくなったときにセッションを状態サーバーにスケーリングするのに役立つため、非常に重要な設計です。

于 2008-09-18T16:05:57.187 に答える