在ASP.NET WEB页面开发中,经常会需要保存一些信息,以便在不同的页面或时间段都能够访问到。这其中便会用到Session和Application。

Session 、Application 和 HttpContext 都是在服务器上开辟了一个内存空间,将一些信息存储到该内存空间中。

Session :Session 会对每一个客户端(浏览器)在服务器端划分一个区域,该区域用于存储该客户端的一些信息,每一个客户端对应服务器端唯一的一个区域空间;Session默认的生存周期为20分钟,当Session超出20分钟或用户主动删除Session,则Session被销毁。

Application :Application 对于每一个WEB网站在服务器端划分一个区域,但对于同一个WEB网站而言,Application 是共享的,也就是说,每一个客户端(浏览器)都可以访问同一个Application值;Application的生存周期为当前WEB网站启动直至关闭。

HttpContext :HttpContext 有一个 Items属性的键值对,可以使用 HttpContext.Items["name"] = "Tom" 的方式来存储值。但HttpContext只对当前请求的响应管道内(生命周期)有效,一旦当前管道关闭或者被销毁,则HttpContext.Items的值也随之被销毁。(所以若使用HttpContext存储值,那么使用 Response.Redirect("页面地址") 的方式会使得页面周期被强行关闭而导致HttpContext被销毁;但是使用 Server.Transfer("页面地址") 的方式并不会使管道被关闭,所以HttpContext依旧会被保存下来。)

在ASP.NET WEB页面开发中,经常会需要保存一些信息,以便在不同的页面或时间段都能够访问到。这其中便会用到Session和Application。Session 、Application 和 HttpContext 都是在服务器上开辟了一个内存空间,将一些信息存储到该内存空间中。Session :Session 会对每一个客户端(浏览器)在服务器端划分一个区域,该区域用于存储该客户端...
回答的也多数都是:引用System.Web,不要用 Http Context .Current. Application 应该用System.Web. Http Context .Current. Application ,后来在网上看到一篇关于System.Runtime.Remoting.Messaging.Call Context 这个类的详细介绍才知道,原来 Http Context .Current是基于System.Runtime.Remoting.Messaging.Call Context 这个类,子线程和异步线程都无法访问到主线程在Call Context 中保存的数据。所以在异步执行的过程会就会出现 Http Co
void Application _Start(object sender, EventArgs e) // Code that runs on application startup string st= Http Context .Current.Request.ContentEncoding.BodyName.ToString(); Http Context .Current.Response.Write(st); void Application _End(object sender, EventArgs e) // Code that runs on application shutdown void Application _Error(object sender, EventArgs e) // Code that runs when an unhandled error occurs void Session _Start(object sender, EventArgs e) // Code that runs when a new session is started void Session _End(object sender, EventArgs e) // Code that runs when a session ends. // Note: The Session _End event is raised only when the session state mode // is set to InProc in the Web.config file. If session mode is set to StateServer // or SQLServer, the event is not raised. void Application _BeginRequest(object sender, EventArgs e) Response.Write("\t\n<br>"+ Http Context .Current.Request.Url.ToString()); </script> 一. 基本认识 1. 简介: Http Context 用于保持单个用户、单个请求的数据,并且数据只在该请求期间保持;     也可以用于保持需要在不同的 Http Modules和 Http Handlers之间传递的值; 用户会话级的 Session application 的缺点是在读取时最好 使用 lock,unlock,损失性能的很。所以它适用那些不需要经常改动的,但又需要每个用户都可以读取到的.数据。     cache就是具有所有 application 的优点,然后又有自己的特点     1.基于依赖性的终止. 使用 关键字作为依赖项,关键字一变,cach... Application _Start 网站启动时候触发,只执行一次 Application _End 网站关闭时候触发,只执行一次 Session _Start 创建 session 时候触发 Session _End 销毁 session 时候触发 Application _Error IIS请求流程 Http 请求到达IIS服务器后, Http RunTime作为入口, Http RunTime类的ProcessRequest方法。 Http RunTime包含着所有的 Http 请求信息(ProcessRequest方法 的 Http WorkRequest参数)。 IIS服务器依赖 HTTP .SYS驱动监听 Http 请求。IIS在操作系统启动时候再 HTTP .SYS中注册自己的虚拟路径(URL访问返回404在这一步执行确定) URL通过验证, HTTP .SYS交给IIS的w3wp.exe执行。然后IIS接收返回的数据流,返还给 Http .sys,最后由 HTTP .SYS 返回浏览器。 Http 请求的处理过程是通过管道(托管模块Module和处理程序Handlers组成) 创建 Http WorkRequest对象,包含所有的 HTTP 请求信息 Http WorkRequest将请求传递给 Http RunTime的ProcessRequest方法, Http RunTime创建 Http Context 对象,并且用 Http WorkRequest进行初始化。 Http RunTime调用 Http Application Factory的Get Application Instance方法创建 Http Application Http Application 继承自I Http Handler,应用程序对象池中是否存 在 Http Application ,存在返回不存在New返回)
maxRequestLength表示ASP支持的最大请求大小,而maxAllowedContentLength指定IIS支持的请求中内容的最大长度。因此,要上传大文件,我们需要同时设置这两个参数:较小的那个“优先”,即最终支持上传的文件的大小根据maxRequestLength和maxAllowedContentLength中的较小值而定。 如果文件长度小于maxAllowedContentLen...
I Http Handler 可以 使用 session ,但需要在实现 I Http Handler 的类中手动启用 session 可以通过实现接口 IReadOnly Session State 或 I Session State 来启用 session 。 IReadOnly Session State 接口表示 I HTTP Handler 实现类只需要读取 session 数据,而不会修改 session 数据。IRequires Session State 接口表示 I HTTP Handler 实现类需要读取和修改 session 数据。 以下是一个实现了 IRequires Session State 接口的 I Http Handler 示例: ```csharp public class MyHandler : I Http Handler, IRequires Session State public void ProcessRequest( Http Context context ) // 读取 session 数据 var myValue = context . Session ["MyKey"]; // 修改 session 数据 context . Session ["MyKey"] = "NewValue"; public bool IsReusable => false; 需要注意的是,如果 使用 session ,那么在处理请求时需要保证线程安全。可以 使用 lock 来实现线程安全。另外, 使用 session 会增加服务器的负载,需要注意性能问题。