黑马程序员_学习笔记14_asp.net之Cookie原理解析

---------------------- Windows Phone 7手机开发.Net培训、期待与您交流! ----------------------

asp.net中的cookie。

cookie是通过在服务器生成一个httpcookie键值对,然后通过http响应输出流,将此键值对输送到用户浏览器,

用户浏览器接收到这个cookie值之后,在每一次象服务器提交表单数据的同时,还会在cookie值也同时提交

到服务器,而且cookie值不仅只是有 我们手动在服务器为其添加的cookie,它还会包括和站点相关的所有的cookie




cookie的运行模式是,我在服务器端给你浏览器写一个cookie 浏览器接收到服务器发给它的这个cookie之后,

在此之后的每一次浏览器和服务器交互的这么一个过程中,浏览器不单单只是将表单数据提交给服务器,

也会将浏览器中存放的cookie值也传回给服务器,服务器那边可以通过用户传送过来的cookie键值对在服务器内存里

动态的创建一个新的cookie对象 来存放和索引浏览器那边传过来的cookie值,以便确定浏览器和服务器之间的唯一

标识符的这么一个功能。




在ASP.NET中,我们可以通过使用两个页面的形式来完成一个简单的cookie赋值和cookie取值的操作。


首先是cookie赋值。

我们在一个文件名叫“cookie赋值”的aspx文件的code_behind代码的单击事件中象用户浏览器发送一个cookie对象、


//cookie赋值操作.aspx

protect void btn_click(object sender,EventArgs e)

{

         //利用Response响应输出流对象的SetCookie方法向用户浏览器发送一个cookie

         Response.SetCookie(new HttpCookie("BrowserId",Guid.NewId().ToString()));

}


//cookie取值操作.aspx

protect void btn_click(object sender,EventArgs e)

{

          //利用Request对象的Cookie对象来索引到浏览器提交过来的cookie值

         string BrowserId = Request.Cookies["BrowserId"].value;

         this.Label1.Text = BrowserId;

}


到这一步 细心的人也许会发现,对于访问同一个网站的所有人来说,服务器为其提供的cookie键值对中

所有的键都是相同的,也许有人就会有这么一个疑问了 既然键都相同的话,那还要cookie干什么呢?

其实,在cookie中 关键起作用的不是键 而是值。而且cookie一般都不会单独的去使用,服务器会根据

当前cookie传过来的值在服务器索引或者创建一个基于此值的一个内存空间(session),它用来表示

当前用户在当前站点服务器内存中的一个“私人位置”.。只有它能访问,别人是不能访问的。



cookie和session在服务器端的页面之间能够传值的原理的差异:

cookie之所能在服务器端各个页面之间传递值,那是因为 浏览器的一个机制:每次在象服务器

提交数据的时候,一定还会提交和当前站点相关信息的所有cookie以及我们在服务器端为当前浏览器设置的

cookie。然后服务器,会根据浏览器传过来的cookie键值对,可以在任意的页面中创建一个新的cookie对象

来接收,既而形成了 cookie能够在网站各个页面之间互相传值的可行性。



Session 能在服务器之间传值,和cookie是有本质上的差别的。

其一:cookie 是往返于服务器端和浏览器端的。而Session只存在服务器端。

其二:cookie可以在网站页面后台代码的任何地方根据浏览器传过来的cookie值动态的创建cookie

         而session则是对于整个网站的所有的网页类的实例来说,它是一个第三者。

其三:在每一次的请求------处理------响应模式中,其实服务器是在后台不断的实例化当前页面的实例对象,

           处理完之后 ,又会由GC机制销毁这个对象。所以,网站的个页面之间是不可能不通过第三者来实现

           跨页面传值的。

其四:Session 是存放在一个独立于网站中各个页面的类外的一个类,但它门又同属于一个程序集,并且Session存放

         类的那个集合是一个静态的,它只于当前Session管理类关联,不和Session管理类的实例关联。所以,只要服务器

        不重启,或者发生其他的什么意外,那么用于的Session永远都是存放在Session管理类的这个静态成员中的。

         Session管理类对于网站中的各个页面所代表的类,它是属于第三者,只要它们在同一个程序集它,那么各个网页的

        的后台代码中都能通过Session静态管理类的某个方法来取得当前用户的Session值,以达到网站个页面之间传值的问题。

        Session传值,更是趋向于面向对象思想。而cookie能在各页面传值只是浏览器的一种机制而产生的。


---------------------- Windows Phone 7手机开发.Net培训、期待与您交流! ----------------------
详细请查看: http://net.itheima.com/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值