了解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; //直接取值

 

posted @ 2022-09-01 16:41  明天星期五啦  阅读(150)  评论(0编辑  收藏  举报