空の mvc3 プロジェクトを作成しました。
1 つのコントローラー ("home") と 2 つのアクション ("index"、"about") があります。
セッションを保存するために sqlserver を使用しています。
ここに私の設定ファイルがあります。
<sessionState mode="SQLServer" cookieless="false" timeout="1" sqlConnectionString="Data Source=localhost;Integrated Security=True;MultipleActiveResultSets=False">
タイムアウトは 1 分です。
インデックスページにあります。セッションを作成しました
Session["currentTime"] = DateTime.Now.ToString();
私の概要ページでは、それをビューに書き出します。
@Session["currentTime"]
初めてアバウトページを開くと、現在の時刻が表示されます。ページを 5 分間そのままにしてから、戻って更新します。古い currentTime がまだ残っています。タイムアウトを 1 に設定したので、すぐに期限切れになり、ページには何も表示されません。
セッションの仕組みを完全に誤解していたのかもしれません。有効期限が切れた後もセッション値が残っている理由を教えてください。
編集:
キャッシュではありません。キャッシュを無効にするために次のコードを追加しました。まだ問題があります。
<meta http-equiv="cache-control" content="max-age=0" />
<meta http-equiv="cache-control" content="no-cache" />
<meta http-equiv="expires" content="0" />
<meta http-equiv="expires" content="Tue, 01 Jan 1980 1:00:00 GMT" />
<meta http-equiv="pragma" content="no-cache" />
問題を見つけたと思いますが、修正方法がわかりません。
Chrome からキャッシュをクリアしました。「/home/index」ページを開いてセッションを作成し、「/home/about」ページに移動します。DBを確認してください。作成されたセッションが 1 つあります。「作成済み」フィールドと「有効期限」フィールドをダブルチェックしました。1分後に期限切れになることを確認しました。
その後、コンピューターから 5 分間離れました。戻ってきて「/home/about」ページを更新した後。セッションはまだ有効期限が切れていません。セッションテーブルにクエリを実行すると、「有効期限」フィールドが1分+ページを更新する時間に変更されていることに注意してください。なぜ期限切れフィールドが変更されたのか?????????
2 回目の更新:
これが問題だと思います。SQL セッション プロバイダーは、セッション テーブルの Expires 列を積極的に監視しません。代わりに、セッションはテーブルから削除されるまで "正式に" 期限切れになりません。これは、DeleteExpiredSessions ストアド プロシージャを呼び出す SQL エージェント ジョブで行われます。デフォルトでは、ジョブは 60 秒ごとに実行されるように構成されています。
SQLエージェントが実行されていないと確信しています。しかし、それをオンにする方法がわかりません。何かアイデアがあれば教えてください。