ASP.NET Cookie对象到底是毛啊?(简单小例子)
记得刚接触asp.net的时候,就被几个概念搞的头痛不已,比如Request,Response,Session和Cookie。然后还各种在搜索引擎搜,各种问同事的,但是结果就是自己还是很懵的节奏。
那cookie到底是毛啊?下面是我最不喜欢的一种解释方式(官方定义吧应该叫,我这种智商根本读不懂嘛~)
Cookie对象也称缓存对象,该对象用于保存客户端浏览器请求的服务器页面,也可用它存放非敏感性的用户信息。
以前根本读不懂啊,现在其实也懵懵的。
还是用例子能把这个概念搞明白
1、做一个用户登录的界面,用cookies保存登录信息的功能。如图:

后台代码:
protected void Page_Load(object sender, EventArgs e)
{
if (Request.Cookies["password"] != null)
{
if (DateTime.Now.CompareTo(Request.Cookies["password"].Expires) > 0)
{
textbox_password.Text = Request.Cookies["password"].Value;
}
}
}
protected void button_login_Click(object sender, EventArgs e)
{
if (checkbox_remember.Checked)
{
HttpCookie cookie_password = new HttpCookie("password");
cookie_password.Value = textbox_password.Text;
Response.Cookies.Add(cookie_password); DateTime dtNow = DateTime.Now;
TimeSpan ts = new TimeSpan(0, 0, 0, 10);//这里是将cookie的有效期设置成10s
cookie_password.Expires = dtNow.Add(ts);
}
}
这个例子很简单,思路就是选择记住密码的checkbox,就创建一个cookie用于记录密码的内容,同时设置有效期。当下次加载的时候,判断有没有这个“密码”cookie,有的话判断这个cookie是否过期,若未过期,就将这个cookie里存的值取出来,放到对应的文本框中。
这里把有效期设置为10s的原因是为了让大家看到的效果明显些。大家只要不断的去刷新页面,就会发现在10s之前,密码部分还是一直有值,过了10s,就自动清空了。这就是因为cookie到期。
2、一个统计当前IP登录页面次数的功能。界面如图:

其实还是这个例子比较有意思,界面很简单,但是问题稍多。
后台代码:
string ipAddress = string.Empty;
protected void Page_Load(object sender, EventArgs e)
{
ipAddress = Dns.GetHostByName(Server.MachineName.ToString()).AddressList[0].ToString();
if (!IsPostBack)
{
if (Request.Cookies.AllKeys.Contains(ipAddress))
{
//Request.Cookies[ipAddress].Value = (Convert.ToInt32(Request.Cookies[ipAddress].Value) + 1).ToString();@@@
HttpCookie cookie_ip = new HttpCookie(ipAddress);
cookie_ip.Value = (Convert.ToInt32(Request.Cookies[ipAddress].Value) + 1).ToString();
Response.Cookies.Set(cookie_ip);
}
else
{
HttpCookie cookie_ip = new HttpCookie(ipAddress);
cookie_ip.Value = "1";
Response.Cookies.Add(cookie_ip);
DateTime dtNow = DateTime.Now;
TimeSpan ts = new TimeSpan(0, 0, 0, 20);
cookie_ip.Expires = dtNow.Add(ts);
}
}
}
protected void button_statistics_Click(object sender, EventArgs e)
{
if (Request.Cookies[ipAddress] != null)
{
textbox_count.Text = Request.Cookies[ipAddress].Value;
}
else
{
textbox_count.Text = "0";
}
} protected void button_clear_Click(object sender, EventArgs e)
{
HttpCookie cookie_ip = new HttpCookie(ipAddress);
cookie_ip.Expires = DateTime.Now.AddDays(-1);
Response.Cookies.Set(cookie_ip);
Request.Cookies.Remove(ipAddress);
Request.Cookies.Clear();
}
这个小例子的思路就是,先获得本地的IP地址,这就保证了添加Cookie的时候,给Cookie了一个独一无二的key。在刷新页面的时候,去判断当前所有Cookie中是否存在一个同名的cookie。如果不存在,就新建一个cookie,当然,此cookie的key=IP地址。就是Page_Load里else的部分。如果存在,那么就在原来的值的基础上加1。这里要注意修改已存在Cookie值的写法。
最开始的时候我用的是注释掉的@@@这行代码,就是正常思路,看着也没什么问题呀,不过这样写不行,第一次加载之后的每次加载,取到的Request.Cookies[ipAddress].Value这个值总是1。所以对于修改已有的cookie值,还是需要使用cookies的set方法才行。
此外还有一个地方是需要注意的,就是删除cookie的时候,如果直接使用Cookies.Remove或者Cookies.Clear()方法都达不到想要的效果。需要配合的加上Expires,给一个负值。然后去更新Cookie,再删除,这样这个cookie就彻底消失了。否则在下次加载的时候又会出现,这个还真不知道是为什么?我之前就写了一句Request.Cookies.Clear(),打断点跟的时候,所有的cookie确实都清空了,但是当再次加载的时候,在添加cookie前打了断点,会发现之前删除的cookie又出现了。很奇怪啊~~
希望明白的朋友告诉一声怎么回事哈。
两个简单的小例子让自己对cookie不再感觉那么陌生和害怕了。所以光看概念还是效果一般,动手才是王道呀~
ASP.NET Cookie对象到底是毛啊?(简单小例子)的更多相关文章
- ASP.NET中的Cookie对象
1.Cookie对象 Cookie对象一般用于在客户端保存一些针对某个用户的信息. Cookie本质上只是一小段文本字符串,改字符串一般保存在用户计算机特定文件夹下的某个文件中,每个Cookie都保存 ...
- 【转载】Asp.Net中Cookie对象的作用以及常见属性
Cookie对象是服务器为用户访问存储的特定信息,这些信息一般存储在浏览器中,服务器可以从提交的数据中获取到相应的Cookie信息,Cookie的最大用途在于服务器对用户身份的确认,即票据认证,用户会 ...
- 初识 Asp.Net内置对象之Cookie对象
Cookie对象 Cookie对象用于保存客户端浏览器请求的服务器页面,也可用于存放非敏感性的用户信息,信息保存的时间可以根据用户的需要经行设置.并非所有的浏览器都支持Cookie,并非数据信息都是以 ...
- Webform:Session、Cookie对象的用法
Session 优点:1.使用简单,不仅能传递简单数据类型,还能传递对象. 2.数据量大小是不限制的. 缺点:1.在Session变量存储大量的数据会消耗较多的服务器资源. 2.容易丢失. 使用方法 ...
- Application对象、Session对象、Cookie对象、Server对象初步认识
Application对象:记录应用程序参数的对象 用于共享应用程序级信息,即多个用户共享一个Application对象.在第一个用户请求ASP.NET文件时,将启动应用程序并创建Applicatio ...
- JavaScript学习08 Cookie对象
JavaScript学习08 Cookie对象 JavaScript Cookie Cookie对象: Cookie是一种以文件的形式保存在客户端硬盘的Cookies文件夹中的用户数据信息(Cooki ...
- ASP.NET Cookie 概述【转】
来源:http://msdn.microsoft.com/zh-cn/library/ms178194(VS.80).aspx ASP.NET Cookie 概述 Cookie 提供了一种在 Web ...
- 关于ASP控件对象的一些简单操作
在线人数 Application.Lock(); Application[).ToString(); Application.UnLock(); Label1.Text = Application[& ...
- BOM 浏览器对象模型_不超过 4 KB 的 document.cookie 对象
注意: 客户端储存应该使用 Web storage API 和 IndexedDB,不推荐使用 Cookie document.cookie 对象 是服务器保存在浏览器的一小段文本信息 用于读写当前网 ...
随机推荐
- linux查看内存
cat /proc/meminfo 查看内存,查看最为准确. cat /proc/cpuinfo 察看CPU情况. dmesg | less 这样也可以看到,不过带太多的其他信息了. top也可 ...
- openstack配置注意事项(主要是网络相关)
vlan协议应该配置为802.1q,另一个容易混淆的为ISL,配置命令为 switchport trunk encapsulation dot1q /islswitchport mode trunk ...
- NandFlash详述【转】
NandFlash详述 转自:http://wenku.baidu.com/view/04d9330bb52acfc789ebc92f.html?re=view 1. 硬件特性: [Flash的硬件实 ...
- 怎样在Ubuntu系统安装可用的QQ
http://jingyan.baidu.com/article/9f63fb91d1f6bbc8400f0e1c.html
- cookie使用
知识拷贝. 理论很简单,而且模式也和大多请求 http://blog.csdn.net/lanmao100/article/details/2328491(源地址).返回状态的SSO差不多.但是有几个 ...
- R语言算术运算和逻辑运算
Arithmetic Operators Operator Description + addition - subtraction * multiplication / division ^ or ...
- HDU (线段树 单点更新) I Hate It
和上一道题没什么变化,只不过把单点增减变成了单点替换,把区间求和变成了区间求最大值. #include <cstdio> #include <algorithm> using ...
- 浅谈 Scala 中下划线的用途
Scala 作为一门函数式编程语言,对习惯了指令式编程语言的同学来说,会不大习惯,这里除了思维方式之外,还有语法层面的,比如 underscore(下划线)就会出现在多种场合,令初学者相当疑惑,今天就 ...
- 使用MFC中的AfxBeginThread创建多线程
创建一个基于对话框的工程,工程名为CreateThreadRect 在CreateThreadRect.cpp中增加一个ThreadProc函数,代码如下 工作者线程的函数必须是全局函数或静态 ...
- (转载)C语言预处理
C程序的源代码中可包括各种编译指令,这些指令称为预处理命令.虽然它们实际上不是C语言的一部分,但却扩展了C程序设计的环境.本节将介绍如何应用预处理程序和注释简化程序开发过程,并提高程序的可读性.ANS ...