0

ここで、inproc asp.netセッションがアクセス(読み取りまたは書き込み)されるたびにタイムアウトをリセットすることを読みました。私の質問は、sessionIDのみを読み取った場合にタイムアウトもリセットされるかどうかです。

例:セッションタイムアウトは20分に設定されています。15分後。非アクティブの場合、ページをロードしてSession.SessionIDを読み取ります。セッションはさらに10分後も存在しますか?

そしてもう1つの質問:ページが直接ロードされるか、AJAX経由でアクセスするかは重要ですか?

4

2 に答える 2

2

あなたは2つの異なることを混同しているように見えます.Session状態からの値の読み取り(コード内)は、SessionStateのインスタンスを現在のRequestにアタッチすることとは異なります.

私が非常に間違っていない限り、タイムアウトは、Session オブジェクトにアクセスするたびに (コードで) 更新されるのではなく、新しい要求が処理されたときに更新されます。これは、SessionState アイテム自体がキャッシュに追加されている (および有効期限ポリシーが設定されている) ために発生します。

したがって、あなたの質問に答えるには: タイムアウトはリセットされません。

あなたが与えた例を詳しく説明するには: タイムアウトは、コードで SessionID を読み取ったときではなく、ページの読み込み時にリセットされます。

于 2009-03-09T11:21:43.957 に答える
1

SessionID にアクセスしても、セッション タイムアウトには影響しません。Reflector を覗いてみると、SessionID プロパティ (HttpSessionStateContainer で実装) は次のようになります。

public string SessionID
{
    get
    {
        if (this._id == null)
        {
            this._id = this._stateModule.DelayedGetSessionId();
        }
        return this._id;
    }
}

基になる保存アイテムには触れません。

また、そのレベルでは、リクエストがどこから来たか (ajax/normal) は関係ありません。

于 2009-03-09T11:21:38.730 に答える