http://www.blogcn.com/user8/flier_lu/index.html?id=3183314
http 协议之所以能够获得如此大的成功,其设计实现的简洁性与无状态连接的高效率是很重要的原因.而为了在无状态的 http 请求与有状态的客户端操作之间达到平衡,产生了服务器端会话 (session) 的概念.客户端在连接到服务器后,就由 web 服务器产生并维护一个客户端的会话;当客户端通过无状态 http 协议再次连接到服务器时,服务器根据客户端提交的某种凭据,如 cookie 或 url 参数,将客户关联到某个会话上.这种思路在各种开发语言与开发环境中大量得到应用. 【程序编程相关:走进C#(我的C#学习之旅)序】【推荐阅读:几个比较好用的asp检查函数】
asp.net 在处理客户端请求时,首先将根据客户端环境,生成一个 system.web.httpcontext 对象,并将此对象作为执行上下文传递给后面的页面执行代码. 【扩展信息:匈牙利命名法】 在 asp.net 中,web 应用程序与会话状态被分别进行维护,通过 httpapplication 与 httpsessionstate 分离 web 应用程序与会话的功能.应用程序层逻辑在 global.asax 文件中实现,运行时编译成 system.web.httpapplication 的实例;会话则作为单独的 system.web.sessionstate.httpsessionstate 实例,由服务器统一为每个用户会话维护,通过 asp.net 页面编译成的 system.web.ui.page 对象子类的 session 属性访问.关于 asp.net 中不同层次关系可参考我以前的一篇文章«.net 1.1中预编译asp.net页面实现原理浅析 [1] 自动预编译机制浅析»,以下简称. 在的分析中我们可以看到,httpruntime 在处理页面请求之前,根据 httpworkerrequest 中给出的环境,构造 httpcontext 对象,并以次对象作为参数从应用程序池中获取可用应用程序.简要代码如下: 以下内容为程序代码:private void httpruntime.processrequestinternal(httpworkerrequest wr){ // 构造 http 调用上下文对象 httpcontext ctxt = new httpcontext(wr, 0); //... // 获取当前 web 应用程序实例 ihttphandler handler = httpapplicationfactory.getapplicationinstance(ctxt); // 调用 handler 实际处理页面请求} httpapplicationfactory 工厂内部维护了一个可用的应用程序实例缓冲池,用户降低应用程序对象构造的负荷.... 下一页