SessionIDにアクセスすると、ASP.Net Inprocセッションのタイムアウトはリセットされますか?
-
05-07-2019 - |
質問
ここを読んで、インプロセスasp.netセッションがリセットされるアクセス(読み取りまたは書き込み)するたびにタイムアウトになります。私の質問は、sessionIDを読み取るだけでタイムアウトがリセットされる場合ですか?
例:セッションタイムアウトは20分に設定されています。 15分後非アクティブのページを読み込み、Session.SessionIDを読み取ります。セッションはさらに10分後に存在しますか?
もう1つの質問:ページが直接読み込まれるか、AJAX経由でアクセスするかは問題になりますか?
解決
あなたは2つの異なることを混ぜているように見えます:セッション状態からのコードの読み取りは、SessionStateのインスタンスを現在のリクエストにアタッチすることとは異なります。
私が非常に間違っていない限り、タイムアウトはSessionオブジェクトにアクセスするたびに(再びコードで)更新されるのではなく、新しいリクエストが処理されるときに更新されます。これは、SessionStateアイテム自体がキャッシュに追加される(および有効期限ポリシーが設定される)ために発生します
だから、あなたの質問に答えるために:タイムアウトはリセットされません。
指定した例を詳しく説明します。コードでSessionIDを読み取るときではなく、ページのロードでタイムアウトがリセットされます。
他のヒント
SessionIDへのアクセスは、セッションタイムアウトに影響しません。 Reflectorを覗いてみると、SessionIDプロパティ(HttpSessionStateContainerで実装)は次のようになります。
public string SessionID
{
get
{
if (this._id == null)
{
this._id = this._stateModule.DelayedGetSessionId();
}
return this._id;
}
}
基になる保存済みアイテムには触れません。
また、そのレベルでは、リクエストの送信元は関係ありません(ajax / normal)。