代码改变世界

老生常谈----ASP.NET中的Cookies,罗列读写Cookies的方法

2012-04-21 15:45  随风浪迹天涯  阅读(2397)  评论(3编辑  收藏  举报

一。Cookies简介

想必做.NET的人都遇到过Cookies这个名词,没有用过也至少听过吧!(估计这种情形特别特别的少!~)。其实,说到Cookies它也有许多别的叫法,姑且叫做别名吧,比如说 HTTP Cookie,Web Cookie,Brower Cookie,Session Cookie等等,名字不一样,其实指的都是同一个东东,整所谓换汤不换药!~。就是这个理。

Cookies主要的作用是为了存储少量数据(注意 是少量),主要是当服务器和浏览器之间不在连接的时候,它会自动的保存一些访问者的信息。还是特别需要强调一下的时候,cookies是一个存储少量数据类型的,而且被存储在客户端上面,比如说 浏览器里面。

比如下面2张图片:

初始化Cookie

上面2张图很浅显的说明了cookie的使用方式。

二。Cookies的使用范围及优势

说到Cookies的使用范围,我们都特别的熟悉,比如权限、session的用户名、用户购物时的购物车等等,这些都在我们平常的开发中很常见很常见的功能。当然,不止这些,你还可能用在其他的方面。

我们需要注意的是,Cookies并不仅仅只是存储数据,它另一方面的功能是能把数据从一个页面传递到另外一个页面。

优势:

1.简单使用

2.对浏览器会保护好它发送的数据(也就是有一定的加密,但强度不强)

3.如果几个站点都有cookie的话,那么浏览器会自定对他们进行安排

三、Cookies的安全性及在本地磁盘的位置

对于安全性这个问题,其实Cookies是显而易见的,就是它存在不安全性。因为Cookies记录了一些用户操作的痕迹,所以一些黑客啊就能通过获取用户的访问权限进行数据的窃取或破坏,从这里来说Cookie有它的不友好的一面。当然,Cookies它不不是一种软件,所以它也就不能像一些可执行文件一样进行执行,也不能在用户的cookies里面携带病毒。

虽然,cookies里面有不安全的成分在里面,但不能否认的是cookies带给我们的开发者的好处。比如,登入一个网站后,保存用户名,然后能在各个页面进行调用,多么的有用?

那Cookie在本地磁盘哪里呢?

首先你需要把勾选“显示所有文件及文件夹”

然后浏览器到C:\Users\【用户名】\AppData\Roaming\Microsoft\Windows\Cookies 中的当前用户,打开cookies文件夹 如下:

四。创建和读取Cookies的方法

4.1 通过HTTPCookies类进行创建

创建Cookies:

HttpCookie StudentCookies = new HttpCookie("StudentCookies");
StudentCookies.Value = TextBox1.Text;
StudentCookies.Expires = DateTime.Now.AddHours(1);
Response.Cookies.Add(StudentCookies);

读取Cookies:

string roll = Request.Cookies["StudentCookies"].Value;

4.2直接通过Response进行创建

创建Cookies:

Response.Cookies["StudentCookies"].Value = TextBox1.Text;
Response.Cookies["StudentCookies"].Expires = DateTime.Now.AddDays(1);

读取Cookies:

string roll = Request.Cookies["StudentCookies"].Value;

4.3多值的存储

创建Cookies:

Response.Cookies["StudentCookies"]["RollNumber"] = TextBox1.Text;
Response.Cookies["StudentCookies"]["FirstName"] = "Abhimanyu";
Response.Cookies["StudentCookies"]["MiddleName"] = "Kumar";
Response.Cookies["StudentCookies"]["LastName"] = "Vatsa";
Response.Cookies["StudentCookies"]["TotalMarks"] = "499";
Response.Cookies["StudentCookies"].Expires = DateTime.Now.AddDays(1); 

读取Cookies:

string roll;
roll = Request.Cookies["StudentCookies"]["RollNumber"];
roll = roll + " " + Request.Cookies["StudentCookies"]["FirstName"];
roll = roll + " " + Request.Cookies["StudentCookies"]["MiddleName"];
roll = roll + " " + Request.Cookies["StudentCookies"]["LastName"];
roll = roll + " " + Request.Cookies["StudentCookies"]["TotalMarks"];
Label1.Text = roll; 

五。删除Cookies的方法

删除Cookies的实质是修改它的过期时间,代码如下:

if (Request.Cookies["StudentCookies"] != null)
{
    Response.Cookies["StudentCookies"].Expires = DateTime.Now.AddDays(-1);
    Response.Redirect("Result.aspx");  //to refresh the page
}

六。HTTPCookie的类包含了所有cookies的集合

对HttpCookie而言,我们不需要提供额外的命名空间,因为HttpCookie类继承自System.Web命名空间。通过HttpCookie,可以使得我们用cookie的时候不需要使用Response和Request,比如4.2和4.3。

HttpCooki类有一些属性,如下,都很好理解的:

  • Domain: Cookie的域
  • Expires: Cookie的过期日期
  • HasKeys: Cookie是否有子键
  • Name: Cookie的名字
  • Path: Cookie的虚拟路径
  • Secure: 是否进行安全的连接
  • Value: Cookie的值
  • Values:多个值

七。Cookie需要注意的地方

1.Cookies的大小是 4096bytes

2.在单个网站最多只能有20个cookies,如果你超过了20个,那么对不起,网站会自动帮你删除老的cookie。

3.终端用户有权利在浏览器上关闭cookie的使用。

如图(我的是firfox浏览器):

有的时候,终端用户会在浏览器上禁用cookie,更极端的是 有一些浏览器上面没有这个cookie功能。在这样的例子下面,你在开发的时候,在使用cookie的时候,你需要提前进行检查一下。如果当前浏览器不支持cookie,你还得需要进行做其他操作。

下面的一段代码就是用来判断是否当前浏览器支持cookie的:

protected void Page_Load(object sender, EventArgs e)
{
    if (Request.Browser.Cookies)
    {
        //支持Cookie
    }
    else
    {
        //不支持 cookies
        //指定到用户指定的页面
    }
}