<p>I am wondering how the HttpContext is maintained given that the request-response nature of the web is essentially stateless.</p>

<p>Is an identifier being for the HttpContext object being sent as part of the __EVENTTarget / __EVENTARGUMENTS hidden fields so that the HttpRuntime class can create the HttpContext class by reading this section from the request (HttpWorkerRequest)?  I don't think</p>

<p>Please let me know as I am trying to fill some holes in my understanding of the http pipeline and I was unable to find any information about this.</p>

<p>I understand something like 
HttpContext.Current.Session["myKey"] = Value;</p>

<p>just works but if I had to do something similar in a different language (say perl), I would have to use hidden fields for the same, wouldn't I?</p>

<p>Thanks
-Venu</p>

I don't think there is one answer to your question, because I don't think everything under the HttpContext umbrella works the same way.  In the example you chose, session state, both the key and value are stored on the server side.  The way it knows how to hook up future requests to that session state is by using a cookie that has a (totally different) key in it. When the browser makes another request, it sends this cookie with the request and the server uses it to figure out which session to map to. Once it figures it out, you've again got access to your dictionary, across responses.
So, to do it in perl, you'd want to manually create a cookie and store a unique key in it, have a server-side mapping of those unique keys to session state dictionaries, and pretty much do what I described above.