ASP.NET中Cookie状态的说明与用法
Cookie最早出现是在NetscapeNavigator2.0中。后来ASP也引入了这个技术,它的作用是与Session对象相结合来识别用户。每当用户开始连接站点时,系统将自动在内存块中创建一个用户有关的会话状态,同时创建一个用户的ID存放在浏览器端,与当前的用户惟一地联系起来。这样,服务器保存了Session,浏览器保存了Cookie(用户的ID)。当下一次用户发出请求时,请求的用户将被要求提交用户的ID,两者对照以正确地还原原来的会话状态。这就是在无状态协议的HTTP条件下保持用户标志的方法。
可以通过Response.Cookies.Add()方法直接向浏览器写入Cookie,通过Request.Cookies方法读取已经设置好的Cookie。
写入Cookie的方法是,先创建一个HttpCookie对象,通过这个对象来构造一个Cookie。例如:
//创建一个HttpCookie对象 HttpCookiecookie=newHttpCookie("乐猪网"); //设定此Cookie值 cookie.Value="编程入门网站"; //加入此Cookie Response.Cookies.Add(cookie);
Cookie有临时的,也有永远的。永久的Cookie以文件形式存储在计算机上,关闭InternetExplorer时仍然保留在计算机上。再次访问该站点时,创建该Cookie的网站可以读取。在具体的编程时候,是在写入此Cookie的时候,设定Cookie的生命周期,其代码如下:
DateTimedtNow=DateTime.Now; TimeSpantsMinute=newTimeSpan(0,1,0,0); cookie.Expires=dtNow+tsMinute; Response.Cookies.Add(cookie);
以上代码是设定新产生的Cookie的生命期为一个小时,可以通过修改TimeSpan的属性来设定Cookie具体的生命期。如果不设定时间,默认时间为20分钟。
读取指定的Cookie时的语句如下:
HttpCookiecookie=Request.Cookies["Cookie的名称"];
如果想将读出的Cookie显示出来时,可以使用以下语句:
Response.Write(cookie.Value.ToString());
Cookie是保存在客户端的字符串,它会影响用户的行为,但又不受用户的直接管理,虽然它只是一种标志(字母数字字符串)而不是程序,不可能用它来收集用户的信息,破坏用户的隐私。但有的用户仍然不放心,也可能是不愿意别人占用自己的空间,相当一部分用户在浏览器中禁止使用Cookie。这就给识别用户带来了困难。
ASP.NET2.0现在已经完全解决了在不使用Cookie的情况下,识别用户的方法(ASP.NET1.1版本只部分地解决了这一问题)。解决的方法很简单,只需要在应用程序的根目录下的Web.config文件中,对<sessionState>节点进行配置,其他任何程序都不需要修改。为什么一定要在应用程序的根目录下配置?因为会话状态的设置是应用程序范围的设置。站点中的网页要么全都使用该配置,要么全都不使用。配置的语句是:
<sessionStatecookieless="useUri"/>
或
<sessionStatecookieless="AutoDetect"/>
配置时,当编写到“cookieless=”语句时,将弹出AutoDetect、useCookies、useDeviceProfile、useUri四种选择。选择AutoDetect或useUri均可在无Cookies的条件下识别用户。
虽然在<sessionState>节点中还可以配置会话状态管理的其他方面,包括存储介质和连接字符串等,但是,就Cookie而言,只需设置Cookieless属性即可。
系统是如何在无Cookie的条件下识别用户的呢?原来当进行了前面的设置以后,系统将会要求用户自动将客户端的资源信息嵌入到用户设用的URL语句中。例如,在使用Cookie的情况下,某用户设用网页时的URL是:http://yourserver/folder/default.aspx,现在设置了不使用Cookie的配置,调用的语句的URL将变成:http://yourserver/folder/(sessionIDhere)/default.aspx,其中“sessionIDhere”代表用户的资源信息所处的位置。该信息已经被插入到URL的语句中。由于用户资源信息对于用户来说具有惟一性,因此可以利用它与Session对象结合,一起来识别用户。
下面举一个完整的小例子吧,请看下面的源代码:
HttpCookieck=Request.Cookies["cktest"]; if(ck==null) { ck=newHttpCookie("cktest"); ck.Value="123"; ck.Expires=DateTime.Now.AddSeconds(20);//20秒的有效期 Response.Cookies.Add(ck); Response.Write("newck"); } else { Response.Write(ck.Value.ToString()); } //在一个Cookie中储存多个信息 HttpCookiecookie=newHttpCookie("cktest"); cookie.Values.Add("v1","1"); cookie.Values.Add("v2","2"); cookie.Values.Add("v3","3"); Response.AppendCookie(cookie); HttpCookiecookies=Request.Cookies["cktest"]; stringvalue1=cookies.Values["v1"]; stringvalue2=cookies.Values["v2"]; Response.Write(value1+value2);
以上就是关于ASP.NET中Cookie状态的说明与用法,对于Cookie使用的利与弊说法不一,我们要合理使用Cookie希望本文对大家学习Cookie有所帮助。