欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

ASP.NET中Cookie状态的说明与用法

程序员文章站 2024-02-14 10:35:22
cookie 最早出现是在netscape navigator 2.0 中。后来 asp 也引入了这个技术,它的作用是与 session 对象相结合来识别用户。每当用户开始...

cookie 最早出现是在netscape navigator 2.0 中。后来 asp 也引入了这个技术,它的作用是与 session 对象相结合来识别用户。每当用户开始连接站点时,系统将自动在内存块中创建一个用户有关的会话状态,同时创建一个用户的 id 存放在浏览器端,与当前的用户惟一地联系起来。这样,服务器保存了 session,浏览器保存了 cookie(用户的 id)。当下一次用户发出请求时,请求的用户将被要求提交用户的 id,两者对照以正确地还原原来的会话状态。这就是在无状态协议的 http 条件下保持用户标志的方法。
    可以通过 response.cookies.add() 方法直接向浏览器写入 cookie,通过 request.cookies 方法读取已经设置好的 cookie。
    写入cookie 的方法是,先创建一个httpcookie 对象,通过这个对象来构造一个 cookie。例如:

//创建一个 httpcookie 对象 
httpcookie cookie = new httpcookie("乐猪网"); 
//设定此 cookie 值 
cookie.value = "编程入门网站"; 
//加入此 cookie 
response.cookies.add(cookie);

    cookie 有临时的,也有永远的。永久的 cookie 以文件形式存储在计算机上,关闭 internet explorer 时仍然保留在计算机上。再次访问该站点时,创建该 cookie 的网站可以读取。在具体的编程时候,是在写入此 cookie 的时候,设定 cookie 的生命周期,其代码如下:

datetime dtnow = datetime.now; 
timespan tsminute = new timespan(0, 1, 0, 0); 
cookie.expires = dtnow + tsminute; 
response.cookies.add(cookie);

    以上代码是设定新产生的 cookie 的生命期为一个小时,可以通过修改 timespan 的属性来设定 cookie 具体的生命期。如果不设定时间,默认时间为 20 分钟。
    读取指定的 cookie 时的语句如下:

httpcookie cookie = request.cookies["cookie 的名称"];

    如果想将读出的 cookie 显示出来时,可以使用以下语句:

response.write(cookie.value.tostring());

    cookie 是保存在客户端的字符串,它会影响用户的行为,但又不受用户的直接管理,虽然它只是一种标志(字母数字字符串)而不是程序,不可能用它来收集用户的信息,破坏用户的隐私。但有的用户仍然不放心,也可能是不愿意别人占用自己的空间,相当一部分用户在浏览器中禁止使用 cookie。这就给识别用户带来了困难。
    asp.net 2.0 现在已经完全解决了在不使用 cookie 的情况下,识别用户的方法(asp.net 1.1 版本只部分地解决了这一问题)。解决的方法很简单,只需要在应用程序的根目录下的 web.config 文件中,对 <sessionstate> 节点进行配置,其他任何程序都不需要修改。为什么一定要在应用程序的根目录下配置?因为会话状态的设置是应用程序范围的设置。站点中的网页要么全都使用该配置,要么全都不使用。配置的语句是:

<sessionstate cookieless="useuri" />

    或

<sessionstate cookieless="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/(session id here)/default.aspx,其中“session id here”代表用户的资源信息所处的位置。该信息已经被插入到 url 的语句中。由于用户资源信息对于用户来说具有惟一性,因此可以利用它与 session 对象结合,一起来识别用户。

下面举一个完整的小例子吧,请看下面的源代码:

httpcookie ck = request.cookies["cktest"]; 
if (ck == null) 
{ 
  ck = new httpcookie("cktest"); 
  ck.value = "123"; 
   
  ck.expires = datetime.now.addseconds(20);//20秒的有效期 
  response.cookies.add(ck); 
  response.write("new ck"); 
} 
else
{ 
  response.write(ck.value.tostring()); 
} 
   
//在一个cookie中储存多个信息 
httpcookie cookie = new httpcookie("cktest"); 
cookie.values.add("v1", "1"); 
cookie.values.add("v2", "2"); 
cookie.values.add("v3", "3"); 
response.appendcookie(cookie); 
httpcookie cookies = request.cookies["cktest"]; 
string value1 = cookies.values["v1"]; 
string value2 = cookies.values["v2"]; 
response.write(value1 + value2);

以上就是关于asp.net中cookie状态的说明与用法,对于cookie 使用的利与弊说法不一,我们要合理使用cookie希望本文对大家学习cookie有所帮助。