HttpContextは、リクエストごとに再作成されます。ただし、HttpSessionは、リクエスト間でサーバーに保存されます。基本的に、HttpSessionはDictionary <string、Dictionary <string、object>>です。初期キーであるセッションIDは、Cookieまたはクエリ文字列パラメーター(Cookieのないセッションを使用している場合)のいずれかによって提供されます。Fiddlerを使用する場合は、そのユーザーのセッションのキーを含むASP.NET_SessionIdCookieが表示されます。
コード内:
class HttpSessionState {
private static readonly Sessions =
new Dictionary<string, Dictionary<string, object>>();
public object this(string key) {
get {
return GetCurrentUserSession()[key]
}
set {
GetCurrentUserSession()[key] = value;
}
}
private Dictionary<string, object> GetCurrentUserSession() {
var id = GetCurrentUserSessionId[]
var d = Sessions[id];
if (d == null) {
d = new Dictionary<string, object>();
Sessions[id] = d;
}
return d;
}
private string GetCurrentUserSessionId() {
return HttpContext.Current.Request.Cookies["ASP.NET_SessionId"].Value;
}
}
実際の実装では、セッションタイムアウト、放棄、およびCookieなしのセッションも処理されますが、基本的な考え方は同じです。