我想知道如何维护HttpContext,因为Web的请求 - 响应性质基本上是无状态的.
是否将HttpContext对象的标识符作为__EVENTTarget/__EVENTARGUMENTS隐藏字段的一部分发送,以便HttpRuntime类可以通过从请求(HttpWorkerRequest)中读取此部分来创建HttpContext类?我不认为
请让我知道,因为我试图填补我对http管道的理解,我无法找到任何有关此信息的信息.
我理解像HttpContext.Current.Session ["myKey"] = Value;
只是工作,但如果我不得不用不同的语言(比如perl)做类似的事情,我将不得不使用相同的隐藏字段,不是吗?
谢谢-Venu
为每个请求重新创建HttpContext.但是,HttpSession跨请求存储在服务器上.基本上,HttpSession是Dictionary
在代码中:
class HttpSessionState { private static readonly Sessions = new Dictionary>(); public object this(string key) { get { return GetCurrentUserSession()[key] } set { GetCurrentUserSession()[key] = value; } } private Dictionary GetCurrentUserSession() { var id = GetCurrentUserSessionId[] var d = Sessions[id]; if (d == null) { d = new Dictionary (); Sessions[id] = d; } return d; } private string GetCurrentUserSessionId() { return HttpContext.Current.Request.Cookies["ASP.NET_SessionId"].Value; } }
真正的实现还处理会话超时,放弃和无cookie会话 - 但基本的想法是相同的.