了解ASP(三) -- Cookie, Session, Application
ASP一共内建了7个对象,有Session、Application、Cookie、Response、Request、Server,这些对象都可以直接使用。
1. 什么是 Cookie?
1. cookie是一种能够让网站服务器把少量数据(4kb左右)存储到客户端的硬盘或内存,并且读可以取出来的一种技术。
2. 当你浏览某网站时,由web服务器放置于你硬盘上的一个非常小的文本文件,它可以记录你的用户id、浏览过的网页或者停留的时间等网站想要你保存的信息。当你再次通过浏览器访问该网站时,浏览器会自动将属于该网站的cookie发送到服务器去,服务器通过读取cookie,得知你的相关信息,就可以做出相应的动作。比如,显示欢迎你的小标题,不用填写帐号密码直接登录等。
3. 不同的浏览器存储的cooks位置是也不一样的。cookie文件的信息是不安全的,所以cookie里面的数据最好加密。
4. 浏览器保存cookie数据有2中形式: 浏览器的内存中,浏览器所在的电脑硬盘中。如果不指定过期时间,那么存储在客户端浏览器内存中,如果指定了过期时间,那么存储在客户端的磁盘上。
2. Cookie的创建和读取
下面的例子可以在Cookie文件中写入键值对为id:234的信息。它是不安全的,所以最好不要将重要信息放在Cookie中,如果想存放在Cookie中,最好加密使用。
使用Response 命令可以将Cookie写入访问者的计算机;使用 Request 命令可以从访问者的计算机中取回cookie
//Create HttpCookie cookie = new HttpCookie("id","234"); //创建cookie的实例。 cookie.Expires = DateTime.Now.AddMonths(5);//设置cookie的过期时间,5个月过期 Response.Cookies.Add(cookie);//将创建的cookie文件输入到浏览器端 //Read Response.Write(Request.Cookies["id"].Value); //读取cookie文件中存储的值
3. 什么是Session?
Session中文是“会话”的意思,在ASP.NET中代表了服务器与客户端之间的“会话”。
系统为每个访问者都设立一个独立的Session对象,用以存储Session变量,并且各个访问者的Session对象互不干扰。简单来说就是服务器给客户端的一个编号。当一台WWW服务器运行时,可能有若干个用户浏览正在运正在这台服务器上的网站。当每个用户首次与这台WWW服务器建立连接时,他就与这个服务器建立了一个Session,同时服务器会自动为其分配一个SessionID,用以标识这个用户的唯一身份。这个SessionID是由WWW服务器随机产生的一个由24个字符组成的字符串,服务器将SessionID当做cookie存储在用户的浏览器中, 这样就能正确返回信息。客户端只负责保存相应网站的SessionID,而其他的Session信息则保存在服务器端。
这个唯一的SessionID是有很大的实际意义的。当一个用户提交了表单时,浏览器会将用户的SessionID自动附加在HTTP头信息中,(这是浏览器的自动功能,用户不会察觉到),当服务器处理完这个表单后,将结果返回给SessionID所对应的用户。
Session与Cookie是紧密相关的。 Session的使用要求用户浏览器必须支持Cookie,如果浏览器不支持使用Cookie,或者设置为禁用Cookie,那么将不能使用Session。
4. Session的读取和写入
由于Session对象是ASP的内置对象,所以Session直接使用就可以了。
//写入 Session["UserName"] = "joye888"; //读取 var userName = Session["UserName"].ToString(); Response.Write(userName); //遍历 IEnumerator sessionEnum = Session.Keys.GetEnumerator(); while (sessionEnum.MoveNext()) { Response.Write(Session[sessionEnum.Current.ToString()].ToString() + " "); } //销毁 Session.Abandon(); //结束会话 Session.Clear();//不结束会话
5. 通过Web.config配置Session的存放位置及形式
<system.web> <sessionState mode="Off|InProc|StateServer|SQLServer" cookieless="true|false" timeout="number of minutes" stateConnectionString="tcpip=server:port" sqlConnectionString="sql connection string" stateNetworkTimeout="number of seconds" /> </system.web>
mode:设置将Session信息存储到哪里
Off:不使用Session功能;
InProc :将Session存储在IIS进程内,这是默认值,也最常用(优点是简单,性能最高。但是当重启IIS服务器时Session丢失。);
StateServer :将Session存储在ASP.NET状态服务进程中(重新启动Web应用程序时保留会话状态,并使会话状态可以用于网络中的多个Web服务器。);
SQLServer :将Session存储在SQL Server中(存储在内存和磁盘中,服务器挂掉重启后都还在)。
cookieless:设置客户端的Session信息存储到哪里
ture 使用Cookieless模式;这时客户端的Session信息就不再使用Cookie存储了,而是将其通过URL存储。
false 使用Cookie模式,这是默认值。
timeout :设置经过多少分钟后服务器自动放弃Session信息。默认为20分钟。
stateConnectionString: 设置将Session信息存储在状态服务中时使用的服务器名称和端口号
例如:"tcpip=127.0.0.1:42424”。当mode的值是StateServer时,这个属性是必需的。(默认端口42424)。
sqlConnectionString: 设置与SQL Server连接时的连接字符串。
例如"data source=localhost;Integrated Security=SSPI;Initial Catalog=joye"。当mode的值是SQLServer时,这个属性是必需的。
stateNetworkTimeout: 设置当使用StateServer模式存储Session状态时,经过x秒空闲后,断开Web服务器与存储状态信息的服务器的TCP/IP连接的。默认值是10秒钟。
6. Session和Cookie的区别
1、cookie存客户端,session存服务端。
2、cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗。
3、session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,考虑到减轻服务器性能方面,应当使用COOKIE。
4、单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。
7. 什么是Application?
Application 对象用于存储和访问来自任何页面的变量,类似于 session 对象,它是一个全局的。Application的自我管理功能非常薄弱,它没有类似Session的超时机制。也就是说,Application中的数据只有通过手动删除或者修改才能释放内存,只要应用程序不停止,Application中的内容就不会消失。
8. Application的读写
Application["count"] = 0; //直接赋值 Application["count"] = (int)Application["count"] + 1; //直接取值