Cookie早已不是不可替代, 不是必不可少, 也因此失去了很多色彩, 很多人把它形容为一鸡肋,食之无味, 弃之可惜. 但若都以此评判, 似乎我们很多技术都很无味, 而似乎都不可缺少. 以我看来, 技术最好少做对比, 选择多了, 困惑也就多了, 心不静, 看什么都是有用而无味. 我却觉得很多技术自己用的得心应手了自然就有了味道.
总结大家对 Cookie "食之无味" 大概有以下几个原因.
(1). 不安全, 这是最直接的一个原因, 因为 Cookie 是保存在客户端计算机上的, 因此很容易被修改, 从而导致访问服务器时应用程序的执行失败或者其他安全问题.
(2). 严重限制传送内容的大小, 这是最实现的一个原因, 大多数浏览器都限制 Cookie 的大小, 一般情况下都不能超过 4096 个字节, 因此传送的内容有限.
(3). 用户可控制 Cookie 的开启与停用: 这是最无奈的一个原因, 当用户设置其浏览器停止接收 Cookie时, 如此, 它便失去了作用.
(4). .......
虽已为鸡肋,但弃之总会可惜, 原因也无非下列几个原由.
(1). 使用简单: 因为使用太简单了, 所以它能活至今日, 虽有不少人一边天天抱怨, 一边却又偷偷地用它. Cookie 的简单是源于它是最简单的 索引键值 的文本结构, 读取与设置数据非常方便.
(2). 不占用任何服务器资源: Cookie 的生成原理是由服务器创建后随网页一起输入到客户端, 并且在驻留在客户端计算机上, 因此不需要占用服务器的任何资源.
(3). 有效期限可随意设置: 随心所欲地设置有效期限使它相当好用, 可以设置当浏览器结束访问时, Cookie 随之消失, 或者设置某个特点的到期时间, 甚至是永久保存在计算机上.
(4). .......
OK, 是福是祸, 人各有志, 暂且放下不谈. 这里我总结出了 Cookie 在网页设计中各个方面所起的作用和使用方法. 还是那句话, 可能不是最全的, 但一定是最实用的. 与大家分享. 好, 这里就从最简单的使用开始.
1. Cookie 可以存储哪些值
在 Cookie 中只能存储个人可识别信息. 个人可识别信息是指可以用来识别或联系用户的信息. 例如用户的姓名, 电子邮件, 家庭住址等. 必须强调的是, 这些可识别信息必须是非机密或重要信息.
2. 使用 Cookie 对象保存和读取客户端信息.
要存储一个 Cookie 变量, 可以通过 Response 对象的 Cookie 集合, 语法如下:
Response.Cookies[varName].Value=值;
其中, varName 为变量名.
要取回 Cookie, 可以使用 Request 对象的 Cookie 集合, 并将指定的 Cookie 集合返回, 语法如下 :
变量名=Request.Cookies[varName].Value;
以例为例: 用 Cookie 操作客户端 IP. 代码如下:
3. 加密 Cookie 中的数据
为了避免用户信息被他人窃取, 增强网站的安全性, 通常需要对 Cookie 中的数据进行加密, 加密代码如下:
4. 使用 Cookie 对象在页面之间传值.
使用 Cookie 对象在页面之间传值与使用 Session 对象在页面之间传值的方法一样, 但两者有本质区别. 即Cookie 是存放在客户端的, 而 Session 是存放在服务器端的. Cookie 在使用时, 还需要配合 Asp.net 内置对象 Request.
使用 Cookie 对象传送信息的代码如下:
在 目标页面 (B.aspx)中, 接收 Cookie 对象传来的值, 并将其显示在界面上, 代码如下:
Label1.Text = Request.Cookies["UserName"].Value.ToString();
5. 使用 Cookie 验证用户登录.
使用 Cookie 来验证用户登录, 首先需要将登录信息保存在 Cookie 对象中, 然后读取并验证.
以例为例, 当用户注册时 ( 当然很多情况下也可以是用户退出系统 ), 将用户和用户密码保存在 Cookie 对象中, 代码如下:
Response.Cookies["SavedLogin"]["UserName"] =txtName.Text.Trim();
Response.Cookies["SavedLogin"]["UserPwd"] = txtPassword.Text.Trim();
Response.Cookies["SavedLogin"].Expires = DateTime.Now.AddDays(1);
Response.Write("<script>alert('注册成功!');location='Default.aspx';</script>");
而当用户登录时, 首先判断 Cookie 对象是否失效, 如果没有失效, 则判断用户输入的信息与 Cookie 对象中保存的信息是否一致, 如果一致, 就进行其他操作. 代码如下:
if (Request.Cookies["SavedLogin"] == null)
{
Response.Write("<script>alert('Cookie 失效!');location='Default.aspx';</script>");
}
else
{
if (txtName.Text == Request.Cookies["SavedLogin"]
["UserName"].ToString() && txtPassword.Text ==
Request.Cookies["SavedLogin"]["UserPwd"].ToString())
{
Session["UserName"] = txtName.Text.Trim();
Response.Redirect("NavigatePage.aspx");
}
else
{
Response.Write("<script>alert('登录失败!')");
}
}
6. 创建及存取多个键值的 Cookie 对象.
多键值的应用其实是一种 "分类" 思想, 把某一类信息存储在一起. 实现方法是
使用 Response 对象可以创建多个数据值的 Cookie, 语法如下:
Response.Cookies["CookieName"]["KeyName"]="Cookie中相对索引键的值";
例如, 使用多键值保存用户名与密码. 代码如下:
当发出网页请求时, 浏览器会将 Cookie 信息发送到服务器. 在服务器端, 可以使用 Request 对象来存取 Cookie中的数据值. 语法格式有以下3种形式.
方法一: 直接取出数据值
stirng str1=Response.Cookies["CookieName"]["KeyName"];
方法二: 利用索引来取出数据值
string str2=Response.Cookies["CookieName"].Values[1];
方法三: 利用索引键名来取出数据值.
string str3=Response.Cookies["CookieName"].Values["KeyName"];
7. 遍历 Cookie 集合
此处以实例演示说明: 如何遍历客户端的 Cookie 对象, 并将客户端的所有 Cookie 对象的内容值显示出来. 代码如下:
8. 设置 Cookie 变量的的生命周期
虽然 Cookie 对象变量是存放在客户端计算机上, 但是也不是永远不会消失. 设计人员在程序中设定 Cookie 对象的有效日期, 语法如下:
Response.Cookies["CookieName"].Expires=日期;
如果没有指定效期 ( Expires 属性), Cookie 变量将不会被保存. 当关闭浏览器时, Cookie 变量也会随之消失.
这里演示几种设定有效期的方法.
9. 删除客户端的 Cookie.
删除客户端的 Cookie 主要是设置指定 Cookies 的有效期, 有以下两种方式.
方法一: 将指定 Cookie 的有效期设置为过去的某个时间. 例如, 设置 Cookie 有效期为当前系统时间的前一天, 代码如下:
Response.Cookies["myCookie"].Expires=DateTime.Now.AddDays(-1);
方法二: 将指定 Cookie 的有效期设置为最小值 ( MinValue). 当浏览器关闭时, 相关 Cookies 失效. 代码如下:
Response.Cookies["myCookie"].Expires=DateTime.MinValue;
10. 删除多值 Cookie 中的某个值.
使用 Remove方法. 相关代码正下:
11. 使用 Cookie 防止网上重复投票
Cookie提供了一种在 Web 应用程序中存储用户特定信息的方法. 例如, 当用户第一次浏览 Web 站点时, Cookie将会记下用户登录 IP地址, 在Cookie 的有效期内, 当该用户再次发出浏览此 Web 站点中页面的请示时, 浏览器就会和服务器交换 Cookie信息, 识别该用户的身份.
这里制作一个简单的程序. 使用 Cookie 的这个特性防止重复投票.
实现方法是, 将客户端的 IP 地址保存在 Cookie 对象中, 主要代码如下:
然后从Cookie中获取客户端的IP地址并判断该IP地址是否已访问过网站, 如果已访问过, 则弹出提示框, 提示用户, 主要代码如下:
12. 使用 Cookie 实现自动登录
一般网站都会提供自动登录服务, 简单的说就是你第一次(或某一次)登录成功后在某个时间段内不需要再输入用户名或密码进行登录.
这很网站会提供给用户一个选择时间段的服务. 下面这个演示示例中, 用户可以在两个星期内, 登录时不再要求输入密码.
代码如下:
13. 使用 Cookie 实现单点登录
单点登录( Single Sign On, SSO)是目前比较流行的企业业务整合的解决方案之一. 简单的说, 就是每个客户端对每个网站同时只能打开一个. 这样最大的好处是可以缓解服务器的压力. 一般在企业网站中较为常见. 因为门户网站, 社区博客等希望你打开的越多越好, 不会设置单点登录.
实现同11中的自动登录原理类似, 此处略.