ASP.NET中Cookie的使用(实战教程)



学习web开发,使用Cookie是不可避免的,在这就浅显的总结一下。仅供新手参阅,老鸟路过。个人感觉Cookie的使用和ASP.NET中的Session非常像,只不过Cookie是保存在客户端,而Session是在服务器端,两者都以记录信息为目的,作为访问网站的凭据。本文仅仅是实践操作,不涉及理论知识。

      本来想画个思维导图,但是想想还是算了,我不太喜欢在博客中贴一个让人眼花缭乱的思维导图,而且思维导图以图片的形式存在也不利于知识的传播。实际操作之前简单的讲一下Cookie吧!

      Cookie其实就是一些保存在客户端的小文件,为下次访问网站时保存一些信息,比如:是否登录。Cookie的最大优点就是使用简单,传递、管理、维护都由浏览器完成;缺点是不安全、大小有限制、受浏览器安全性设置限制。刚刚提到Cookie实际上是一些小文件,这些文件肯定是用来存储信息的,那么这些小文件在哪里呢?这要分情况而言,如果服务器建立的是非持久性Cookie,那么这些文件保存在浏览器的内存中,一旦完全关闭浏览器,Cookie便失效了;如果服务器建立的是持久性Cookie,那么这些文件就被存放在:C:\你的用户名\Default\AppData\Roaming\Microsoft\Windows\Cookies,直接把正确的路径复制到资源管理器地址栏回车访问即可,不要手动寻找,那样是找不到的(即使显示了隐藏文件,也找不到Cookies文件夹),这些Cookie文件以文本文档的形式存储在这里,所以安全性就可想而知了。在程序中,如果我们设置Cookie的有效时间,则此Cookie就是持久性Cookie,如果不设置,默认的就是非持久性Cookie。

      需要注意的是:当我们访问一个页面时,如果有对应的Cookie,浏览器会自动传递给服务器端,服务器端返回到客户端的Cookie也由浏览器处理,完全不用我们操心;Cookie是可以覆盖的,如果重复写入同名的Cookie,那么将会覆盖之前的Cookie。

      以下的代码展示了:“服务器端如何读取客户端的Cookie”、“服务器端向客户端写入非持久性Cookie”、“服务器端向客户端写入持久性Cookie”、“持久性Cookie和非持久性Cookie的区别”、“强制让有效的持久化Cookie失效”。有了上边的讲解,再加上代码中的详细注释,相信读者一看就会。直接复制以下代码到vs,可正常运行。


Web前台HTML代码:

[html]  view plain  copy
 print ?
  1. <body>  
  2.     <form id="frmUp" runat="server" method="post">   
  3.         <div>  
  4.             存入\读取Cookies:<asp:TextBox ID="txtUserName" runat="server"></asp:TextBox>  
  5.             <asp:Button ID="btnSaveTemp" runat="server" Text="写入非持久化Cookies"   
  6.                 onclick="btnSaveTemp_Click" />  
  7.             <asp:Button ID="btnSaveKeep" runat="server" Text="写入持久化Cookies"   
  8.                 onclick="btnSaveKeep_Click" />  
  9.             <asp:Button ID="btnChangeCookie" runat="server" Text="强制持久化Cookies过期"   
  10.                 onclick="btnChangeCookie_Click" />  
  11.             <asp:Button ID="btnRead" runat="server" Text="读取" onclick="btnRead_Click" />  
  12.         </div>  
  13.     </form>  
  14. </body>  


Web后台C#代码:

[csharp]  view plain  copy
 print ?
  1. //页面加载处理  
  2.     protected void Page_Load(object sender, EventArgs e)  
  3.     {  
  4.         //加载时判断是否存在Cookies,存在则读取  
  5.         HttpCookie login = Request.Cookies["Login"]; //获取客户端返回的Cookies中名称为Login的Cookie对象  
  6.         if(login != null)  
  7.         {  
  8.             txtUserName.Text = login["userName"]; //读取Login中属性值  
  9.         }  
  10.         else  
  11.         {  
  12.             txtUserName.Text = "Cookies无效";  
  13.         }  
  14.     }  
  15.   
  16.     //服务器端向客户端写入非持久化Cookie  
  17.     protected void btnSaveTemp_Click(object sender, EventArgs e)  
  18.     {  
  19.         HttpCookie tempCookie = new HttpCookie("Login"); //创建一个HttpCookie实例,Cookies名称为Login,实例只是一个容器,真正使用的是Cookie名称  
  20.         tempCookie["userName"] = "www.kpdown.com"//向Login中添加一个userName属性,并赋值  
  21.         Response.Cookies.Add(tempCookie); //把Cookies对象返回给客户端  
  22.     }  
  23.   
  24.     //服务器端向客户端写入持久化Cookie  
  25.     protected void btnSaveKeep_Click(object sender, EventArgs e)  
  26.     {  
  27.         HttpCookie keepCookie = new HttpCookie("Login"); //创建一个HttpCookie实例,Cookies名称为Login,实例只是一个容器,真正使用的是Cookie名称  
  28.         keepCookie["userName"] = "www.kpdown.com"//向Login中添加一个userName属性,并赋值  
  29.         keepCookie.Expires = DateTime.Now.AddDays(2); //设定Cookies的有效期为两天  
  30.         Response.Cookies.Add(keepCookie); //把Cookies对象返回给客户端  
  31.     }  
  32.   
  33.     //强制让有效的持久化Cookie失效  
  34.     protected void btnChangeCookie_Click(object sender, EventArgs e)  
  35.     {  
  36.         HttpCookie changeCookie = new HttpCookie("Login"); //使名称为Login的Cookies失效,就把HttpCookie对象的Cookie名称写成Login,相当于用新Login覆盖了旧的Login,Cookie可以覆盖  
  37.         changeCookie["userName"] = "www.kpdown.com"//依然设置属性值,无法读取,证明Cookie已经失效  
  38.         changeCookie.Expires = DateTime.Now.AddDays(-1); //设定Cookies的有效期为无效时间即可让该Cookie失效  
  39.         Response.Cookies.Add(changeCookie);  
  40.     }  
  41.   
  42.     //服务器端读取客户端的Cookie  
  43.     protected void btnRead_Click(object sender, EventArgs e)  
  44.     {  
  45.         HttpCookie login = Request.Cookies["Login"]; //获取客户端返回的Cookies中名称为Login的Cookie对象  
  46.         if (login != null)  
  47.         {  
  48.             txtUserName.Text = login["userName"]; //读取Login中属性值  
  49.         }  
  50.         else  
  51.         {  
  52.             txtUserName.Text = "Cookies无效";  
  53.         }  
  54.     }  


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值