记得刚接触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对象到底是毛啊?(简单小例子)的更多相关文章

  1. ASP.NET中的Cookie对象

    1.Cookie对象 Cookie对象一般用于在客户端保存一些针对某个用户的信息. Cookie本质上只是一小段文本字符串,改字符串一般保存在用户计算机特定文件夹下的某个文件中,每个Cookie都保存 ...

  2. 初识 Asp.Net内置对象之Cookie对象

    Cookie对象 Cookie对象用于保存客户端浏览器请求的服务器页面,也可用于存放非敏感性的用户信息,信息保存的时间可以根据用户的需要经行设置.并非所有的浏览器都支持Cookie,并非数据信息都是以 ...

  3. Webform:Session、Cookie对象的用法

    Session 优点:1.使用简单,不仅能传递简单数据类型,还能传递对象.  2.数据量大小是不限制的. 缺点:1.在Session变量存储大量的数据会消耗较多的服务器资源. 2.容易丢失. 使用方法 ...

  4. Application对象、Session对象、Cookie对象、Server对象初步认识

    Application对象:记录应用程序参数的对象 用于共享应用程序级信息,即多个用户共享一个Application对象.在第一个用户请求ASP.NET文件时,将启动应用程序并创建Applicatio ...

  5. JavaScript学习08 Cookie对象

    JavaScript学习08 Cookie对象 JavaScript Cookie Cookie对象: Cookie是一种以文件的形式保存在客户端硬盘的Cookies文件夹中的用户数据信息(Cooki ...

  6. ASP.NET Cookie 概述【转】

    来源:http://msdn.microsoft.com/zh-cn/library/ms178194(VS.80).aspx ASP.NET Cookie 概述 Cookie 提供了一种在 Web ...

  7. 关于ASP控件对象的一些简单操作

    在线人数 Application.Lock(); Application[).ToString(); Application.UnLock(); Label1.Text = Application[& ...

  8. 重温Servlet学习笔记--Cookie对象

    首先要了解cookie必须得先了解http协议,,Cookie是http协议指定的,先由服务器保存cookie到浏览器,在下次浏览器请求服务器时把上次请求得到的cookie归还给服务器,cookie以 ...

  9. Cookie对象工具包,对象添加,获取,修改-亲测可用

    先来了解下Cookie 和 Session对象的概念吧. 首先,Cookie是客户端缓存技术,大小一般为4kb左右,主要存储一些比较小的信息,常用的例子有用户名和密码,且是不安全的: Session是 ...

随机推荐

  1. JavaScriptSerializer 序列化json 时间格式

    利用JavaScriptSerializer 序列化json 时间格式,得到的DateTime值值显示为“/Date(700000+0500)/”形式的JSON字符串,显然要进行转换 1.利用字符串直 ...

  2. .Net中使用无闪刷新控件时提示框不显示

    今天做提示框的时候一直不显示,让我郁闷好久,晚上吃饭的时候问了同事一下,他给了一个思路, 他说可能是因为由于页面中的无闪刷新导致的结果:百度了一下真找到了解决方法 在页面中存在无闪刷新控件的时候提示框 ...

  3. python numpy包

    在numpy包中我们可以用数组来表示向量,矩阵和高阶数据结构 首先导入numpy包: from numpy import* 初始化numpy数组有多种方式,比如说 1.python列表或元祖 2.使用 ...

  4. NHibernate系列文章目录

    第一章:NHibernate基础 NHibernate介绍 第一个NHibernate工程 简单的增删改查询 运行时监控 NHibernate配置 数据类型映射 Get/Load方法 NHiberna ...

  5. 交叉编译alsa声卡驱动

    變異成靜態 ./configure --target=arm-linux --enable-shared=no --enable-static=yes 編譯成動態 ./configure --targ ...

  6. A feature in Netsuite Reports > Financial > Balance Sheet

    最新版本的Customize balance sheet page Left side > Layout > Add Reference Row Then in right side, y ...

  7. iOS.StaticLibrary.1-avoid-duplicate-symbol-in-static-library[draft]

    Avoid duplicate symbol in static library and its customer 发布static library给使用者使用.在实际的工程实践中,iOS静态库一般会 ...

  8. 【P1303】苹果二叉树

    树归入门题 原题: 有一棵苹果树,如果树枝有分叉,一定是分2叉(就是说没有只有1个儿子的结点).这棵树共有N个结点(叶子点或者树枝分叉点),编号为1-N,树根编号一定是1.我们用一根树枝两端连接的结点 ...

  9. Subclasses

    Given a collection of numbers, return all possible subclasses. public class Solution { public List&l ...

  10. decorate装饰模式

    package com.decorate; public class Iphone implements Phone{ @Override public void call() { System.ou ...