セッションを維持する方法: session.timeout=-1、または 0 未満の数値を設定するという人もいます。この方法は明らかに不可能です。セッションの計算時間は分単位であり、1 以上の整数である必要があります。他の人が session.timeout=99999 を設定すると言っています。これも機能しません。セッションには最大時間制限があります。テストした結果、最大値は 24 時間であることがわかりました。つまり、設定できる最大値は session.timeout=1440 であり、1441 は許可されていません (笑)。私のテスト環境: win2003+IIS6.0+ASP3.0。
したがって、session.timeout の有効期限を設定してセッションが期限切れにならないようにすることはできません。 Cookie に書き込む方が良い方法です。インターネット上にはそのようなチュートリアルがたくさんあるので、ここでは説明しません。もう 1 つの方法は、セッションを維持するページに非表示の iframe を設定し、時々 (この時間は session.timeout 時間未満です)、フレーム内の空のページを更新することです。実装方法は以下の通りです。
保持したいセッション ページに以下を追加します。
次のようにコードをコピーします。
<iframe width=0 height=0 src=/blog/SessionKeeper.asp></iframe>
同じディレクトリに SessionKeeper.asp ファイルを作成します。 XML/HTMLコードをコピーする
次のようにコードをコピーします。
<html>
<頭>
<meta http-equiv=Refresh content=900000;url=sessionKeeper.asp>
<!--サーバーと通信し、セッションが失われないようにするために、900 秒ごとに更新してください-->
</head>
</html>
この方法は比較的一般的であり、上記に似た別の方法もありますが、メタを使用してネストされた iframe を自動的に更新しません。もちろん、関数は空のファイルに接続する必要がありますが、javascript:window.setTimeout(functionname(),10000); を使用しています。具体的な方法は以下の通りです。
追加: JavaScript のコードを維持するセッションにコピーします
次のようにコードをコピーします。
<script id=戻る language=javascript></script>
<スクリプト言語=javascript>
関数 keepsession(){
document.all[戻る].src=/blog/SessionKeeper.asp?RandStr=+Math.random();
//ここでの RandStr=Math.random は、同じアドレスのリフレッシュが無効にならないように、back.src の値を毎回変えるだけです。
window.setTimeout(keepsession(),900000); //900 秒ごとに自身を呼び出します。
}
keepsession();
</script>この方法では、同じディレクトリに空のコンテンツを含む sessionKeeper.asp ファイルを作成するだけです。
問題は解決されていません。上記の方法でセッションを維持しても問題はありません。要求なしでセッションをクリアするための IIS のデフォルト値は、各対話型サービスに設定した時間よりもはるかに短いです。しかし、私の場合は1日ほどかかりましたが、時間が経ってもセッションが理由もなく消えてしまいます。押し下げられた。
その後、インターネット上のさまざまな場所を検索し、最終的に答えを見つけました。サーバーを保護するために、IIS にはリサイクルの概念があることがわかりました。長い間テストを続けた結果、ようやく全体的な理解が深まりました(笑わないでください^-^)。まず、このリサイクルがどこで行われているかを見てみましょう。
IIS マネージャーを起動し、[アプリケーション プール] を右クリックし、[プロパティ] をクリックし、[リサイクル] タブを選択します。デフォルトで機能する項目が 1 つあります。これは最初の項目です。デフォルト値は 1740 分 (約) です。 29時間。彼はどういう意味でしょうか?私の個人的な理解: 進行中のセッションはすべて、session.timeout から 1740 分後に自動的にクリアされます。この値は最大 4,000,000 に設定でき、これは約 2,700 日を超えます。彼が自動的にリサイクルすることなく、私は直接キャンセルしました。問題はついに解決されました。
さらに、このプロパティ ダイアログ ボックスには他にもいくつかの項目があります。
2 番目の項目は、接続ユーザー数が一定の数を超えたときにリサイクルされる必要があります。
3つ目は、一定のタイミングで自動的にリサイクルすることです。
[パフォーマンス] タブで、この期間アイドル状態になった後にワーカー プロセスをシャットダウンします。ここで、IIS のデフォルトの session.timeout 時間が設定されます。デフォルト値は 20 分です。ここでの最大値は 4000000 に設定することもできます。これは、ASP ページで session.timeout の最大値を 1440 に設定することとは異なります。ここで 1440 を超える値を設定しても機能するかどうかはテストしていません。では、なぜ ASP ページの session.timeout の最大値は 1440 しかないのに、IIS のプロパティではこれほど大きく設定できるのでしょうか?これは保護メカニズムである必要があります。ASP ページではすべてのユーザーが session.timeout の値を設定できますが、IIS では管理者のみが値を設定できます。この 2 つは異なる権限を持っているため、設定範囲が異なります。