Cookie全解

1. Cookie 可以存储哪些值

  在 Cookie 中只能存储个人可识别信息. 个人可识别信息是指可以用来识别或联系用户的信息. 例如用户的姓名, 电子邮件, 家庭住址等. 必须强调的是, 这些可识别信息必须是非机密或重要信息.

 

2. 使用 Cookie 对象保存和读取客户端信息.

  要存储一个 Cookie 变量, 可以通过 Response 对象的 Cookie 集合, 语法如下:

  Response.Cookies[varName].Value=值;

 

  其中, varName 为变量名.

  要取回 Cookie, 可以使用 Request 对象的 Cookie 集合, 并将指定的 Cookie 集合返回, 语法如下 :

  变量名=Request.Cookies[varName].Value;

  以例为例: 用 Cookie 操作客户端 IP. 代码如下: 

使用Cookie保存和读取客户端信息
//保存客户端信息
string UserIP = Request.UserHostAddress.ToString();//获取客户端的IP地址
Response.Cookies["IP"].Value = UserIP;//将客户端的IP地址保存在Cookies对象中
Response.Cookies["IP"].Expires = DateTime.MaxValue;//设计Cookies的失效期

//读取
Response.Write(Request.Cookies["IP"].Value);//从Cookies中读取客户端IP地址值
 

 

 

3. 加密 Cookie 中的数据

  为了避免用户信息被他人窃取, 增强网站的安全性, 通常需要对 Cookie 中的数据进行加密, 加密代码如下:   

对Cookie中的数据加密
string data = "对Cookie中的数据加密。";
Response.Cookies[
"data"].Value = FormsAuthentication.HashPasswordForStoringInConfigFile(data, "md5");
Response.Write(Request.Cookies[
"data"].Value);
 

 

4. 使用 Cookie 对象在页面之间传值.

  使用 Cookie 对象在页面之间传值与使用 Session 对象在页面之间传值的方法一样, 但两者有本质区别. 即Cookie 是存放在客户端的, 而 Session 是存放在服务器端的. Cookie 在使用时, 还需要配合 Asp.net 内置对象 Request.

使用 Cookie 对象传送信息的代码如下: 

使用Cookie传客户信息
if (txtName.Text == "A" && txtPassword.Text == "a")
{
HttpCookie newCookie
= new HttpCookie("UserName");
newCookie.Value
= txtName.Text.Trim();
Response.AppendCookie(newCookie);
Server.Transfer(
"B.aspx");
}
else
{
Response.Write(
"<script>alert('登录失败!');</script>");
}
 

 

 

在 目标页面 (B.aspx)中, 接收 Cookie 对象传来的值, 并将其显示在界面上, 代码如下: 

接收
Label1.Text = Request.Cookies["UserName"].Value.ToString();
 

 

 

5. 使用 Cookie 验证用户登录.

  使用 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存储多键值信息
if (txtName.Text == "A" && txtPassword.Text == "a")
{
Response.Cookies[
"UserInfo"]["UserName"] = this.txtName.Text.Trim();
Response.Cookies[
"UserInfo"]["UserPwd"] = this.txtPassword.Text.Trim();
Response.Redirect(
"B.aspx");


}
else
{
Response.Write(
"<script>alert('登录失败!');</script>");
}
 

 

   当发出网页请求时, 浏览器会将 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 对象的内容值显示出来. 代码如下: 

遍历Cookie集合
string[] cookieName, keyName;//定义两个数组,用来存放名称
HttpCookieCollection myCookieCollection;//定义Cookies集合对象
HttpCookie myCookie;//定义Cookie对象
myCookieCollection = Request.Cookies;//将客户端的Cookie取出
cookieName = myCookieCollection.AllKeys;//取得集合中所有的Cookie名称
for (int i=0; i <= cookieName.GetUpperBound(0); i++)//对每个Cookie进行循环
{
myCookie
=myCookieCollection[cookieName[i]];
Response.Write(
"该Cookie的名称:"+myCookie.Name +"<br>"+"该Cookie的到期时间:"+myCookie.Expires+"<br>");
Response.Write(
"该Cookie中所有的内容值如下所示:"+"<br>");//输出Cookie内容
keyName = myCookie.Values.AllKeys;
for (int j = 0; j <= keyName.GetUpperBound(0); j++)
{
Response.Write(keyName[j]
+""+myCookie[keyName[j]]+"<br>");
}
Response.Write(
"<hr>");
 

 

 

8. 设置 Cookie 变量的的生命周期

  虽然 Cookie 对象变量是存放在客户端计算机上, 但是也不是永远不会消失. 设计人员在程序中设定 Cookie 对象的有效日期, 语法如下:

  Response.Cookies["CookieName"].Expires=日期;

 

  如果没有指定效期 ( Expires 属性), Cookie 变量将不会被保存. 当关闭浏览器时,  Cookie 变量也会随之消失.

  这里演示几种设定有效期的方法. 

设置Cookie的有效期
//20分钟后到期
TimeSpan ts=new TimeSpan(0, 0, 20, 0);
Response.Cookies[
"myCookie"].Expires=DateTime.Now.Add(ts);

//一个月后到期
Response.Cookie["myCookie"].Expires=DateTime.Now.AddMouths(1);

//指定具体有效日期
Response.Cookies["myCookie"].Expires=DateTime.Parse("2010-10-1");

//永远不过期
Response.Cookies["myCookie"].Expires=DateTime.MaxValue;

//关闭浏览器后过期
Response.Cookies["myCookie"].Expires=DateTime.MinValue;

 

 

 

 

 

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方法. 相关代码正下: 

删除多值Cookie中的某个值
if (txtval1.Text != "" && txtval2.Text != "")
{
HttpCookie hc
= Request.Cookies["Val"];
hc.Values.Remove(
"val2");
Response.Cookies.Add(hc);
}
else
{
Response.Write(
"请先输入变量值!");

}
 

 

 

11. 使用 Cookie 防止网上重复投票

   Cookie提供了一种在 Web 应用程序中存储用户特定信息的方法. 例如, 当用户第一次浏览 Web 站点时, Cookie将会记下用户登录 IP地址, 在Cookie 的有效期内, 当该用户再次发出浏览此 Web 站点中页面的请示时, 浏览器就会和服务器交换 Cookie信息, 识别该用户的身份. 

   这里制作一个简单的程序. 使用 Cookie 的这个特性防止重复投票.

   实现方法是, 将客户端的 IP 地址保存在 Cookie 对象中, 主要代码如下:

保存客户端的IP到Cookie
//判断指定的IP是否已投过票了,如果已经投过了,则弹出提示对话框
string UserIP = Request.UserHostAddress.ToString();
int VoteID = Convert.ToInt32(RadioButtonList1.SelectedIndex.ToString())+1;
//获取名为userIP的Cookie对象
HttpCookie oldCookie=Request.Cookies["userIP"];
//判断该Cookie对象是否存在
if (oldCookie == null)
{
UpdateVote(VoteID);
Response.Write(
"<script>alert('投票成功,谢谢您的参与!')</script>");
//定义新的Cookie对象
HttpCookie newCookie = new HttpCookie("userIP");
newCookie.Expires
= DateTime.MinValue;
//添加新的Cookie变量IPaddress,值为UserIP
newCookie.Values.Add("IPaddress", UserIP);
//将变量写入Cookie文件中
Response.AppendCookie(newCookie);
return;
}
 

 

 

   然后从Cookie中获取客户端的IP地址并判断该IP地址是否已访问过网站, 如果已访问过, 则弹出提示框, 提示用户, 主要代码如下:

从Cookie中获取客户端IP地址
//从Cookie中获取客户端IP地址
string userIP = oldCookie.Values["IPaddress"];
if (UserIP.Trim() == userIP.Trim())
{
Response.Write(
"<script>alert('一个IP地址只能投一次票,谢谢您的参与!');history.go(-1);</script>");
return;

}
else
{
//创建 HttpCookie 类型的对象并为它分配名称为userID
HttpCookie newCookie = new HttpCookie("userIP");
//为 Cookie 的子项赋值,即将客户端IP地址赋给Cookie的子项,并将其命名为IPaddress
newCookie.Values.Add("IPaddress", UserIP);
//设置所有 Cookie失效期
newCookie.Expires = DateTime.MinValue;
//将该 Cookie 添加到 Cookies 集合中
Response.Cookies.Add(newCookie);
//Response.AppendCookie(newCookie);
UpdateVote(VoteID);
Response.Write(
"<script>alert('投票成功,谢谢您的参与!')</script>");
return;
}
 

 

 

12. 使用 Cookie 实现自动登录

   一般网站都会提供自动登录服务, 简单的说就是你第一次(或某一次)登录成功后在某个时间段内不需要再输入用户名或密码进行登录. 

   这很网站会提供给用户一个选择时间段的服务. 下面这个演示示例中, 用户可以在两个星期内, 登录时不再要求输入密码. 

   代码如下:

 

使用Cookie将实现自动登录
if (Request.Cookies["UserName"] != null)
{
Response.Redirect(
"B.aspx?UserName=" + Request.Cookies["UserName"].Value);
}
else
{
if(this.txtName.Text=="A"&&this.txtPassword.Text=="a")
{
if (CheckBox1.Checked == true)
{
Response.Cookies[
"UserName"].Value = System.Web.HttpUtility.UrlEncode(txtName.Text);
Response.Cookies[
"UserName"].Expires = DateTime.Now.AddDays(14);
}
Response.Redirect(
"B.aspx?UserName=" + System.Web.HttpUtility.UrlEncode(txtName.Text));

}
else
{
Response.Write(
"<script>alert('输入出错!')</script>");
}
}
 

 

 

13. 使用 Cookie 实现单点登录

   单点登录( Single Sign On, SSO)是目前比较流行的企业业务整合的解决方案之一. 简单的说, 就是每个客户端对每个网站同时只能打开一个. 这样最大的好处是可以缓解服务器的压力. 一般在企业网站中较为常见. 因为门户网站, 社区博客等希望你打开的越多越好, 不会设置单点登录. 

   实现同11中的自动登录原理类似, 此处略. 

 

 

 

转载于:https://www.cnblogs.com/beihoudetiantang/archive/2008/09/21/1295260.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/299565.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

代码格式

2019独角兽企业重金招聘Python工程师标准>>> 1.参考&#xff1a;JavaScript程序编码规范 转载于:https://my.oschina.net/u/1791074/blog/283578

94年出生,6篇SCI,一作发Science,你还不放下手上玩的泥巴

全世界只有3.14 % 的人关注了 青少年数学之旅 2019年9月27日&#xff0c;国际顶尖期刊《科学》&#xff08;Science&#xff09;杂志在线以全文Article的形式发表了北京航空航天大学材料科学与工程学院赵立东教授课题组在热电材料研究上取得的新进展&#xff0c;北京航空航天大…

一个问题让我直接闭门思过!!!拼多多面试必问项之List实现类:LinkedList

一、LinkedList概述 1、对于频繁的插入或删除元素的操作&#xff0c;建议使用LinkedList类&#xff0c;效率较高。 2、LinkedList是一个实现了List接口和Deque接口的双端链表。 3、LinkedList底层的链表结构使它支持高效的插入和删除操作&#xff0c;另外它实现了Deque接口&a…

Docker小白到实战之开篇概述

前言“不对啊&#xff0c;在我这运行很正常啊”&#xff0c;这句话小伙伴们在前几年应该听得很多&#xff1b;每次一到安装、部署时总有一堆问题&#xff0c;毕竟操作系统版本、软件环境、硬件资源、网络等因素在作怪&#xff0c;此时难免会导致开发小伙伴和运维哥们互相甩锅&a…

设置su为不需要密码切换为root

设置su为不需要密码 如果需要对某用户su命令也不需要输入密码&#xff0c;则需要修改下列的&#xff1a;1--->如果没有wheel组 则用sudo groupadd wheel创建命令为 sudo groupadd wheel&#xff1b;2---->sudo vim /etc/group将username和root加入到wheel用户组内 如图&a…

被女朋友拉黑后,我写了个“舔狗”必备神器

全世界只有3.14 % 的人关注了 青少年数学之旅 “ 在一个阳光明媚的清晨&#xff0c;我打开窗户呼吸了一口新鲜空气。阳光灿烂&#xff0c;岁月静好&#xff0c;又是一个约女朋友出去爬山吃饭看电影的好日子。 图片来自包图网 想到女朋友的大眼睛&#xff0c;我脸上不禁洋溢起了…

涨薪关键之反射机制,引得项目经理对你的看重,加薪触手可及!!!!

前言 就比如我前几天被面试官问什么是反射&#xff1f;&#xff1f;&#xff1f; 而我的回答是&#xff01;&#xff01;&#xff01; 反射是动态语言的关键&#xff0c;反射允许程序在执行期间借助Reflection API取得任何类的内部信息&#xff0c;并能直接操作任曦对象的内…

如何摆脱「自我否定」状态

大家好&#xff0c;我是Z哥。你最近正处于自我否定的状态吗&#xff1f;如果不是的话&#xff0c;回想一下最近的一次处于这种状态是什么时候&#xff1f;当时的感受如何&#xff1f;以及&#xff0c;最终是如何走出这个状态的&#xff1f;不着急&#xff0c;给你 1 分钟回忆一…

struct and union

[url]http://hi.baidu.com/tweigh/blog/item/5303d2ef6e2720eace1b3e9d.html[/url]1. struct的巨大作用面对一个人的大型C/C程序时&#xff0c;只看其对struct的使用情况我们就可以对其编写者的编程经验进行评估。因为一个大型的C/C程序&#xff0c;势必要 涉及一些(甚至大量)进…

编码GBK的不可映射字符

为什么80%的码农都做不了架构师&#xff1f;>>> 由于JDK是国际版的&#xff0c;在编译的时候&#xff0c;如果我们没有用-encoding参数指定我们的JAVA源程序的编码格式&#xff0c; 则javac.exe首先获得我们操作系统默认采用的编码格式&#xff0c; 也即在编译java…

低调的大神!他改变了半导体产业!史上唯一两次获得诺贝尔物理奖,却几乎被人遗忘...

全世界只有3.14 % 的人关注了青少年数学之旅两次获得诺贝尔奖的科学家&#xff0c;世界上仅有这四个人&#xff01;他们是&#xff1a;1. 居里夫人(Marie Curie,1867~1934),波兰科学家,他的丈夫叫皮埃尔居里,两人合称“居里夫妇”! 1903年,居里夫妇和亨利...2.约翰巴丁 美国物理…

入职第一天,我接手了号称【屎山】的祖传代码,这还能卷吗???

公司各种各样的祖传代码都是令新人虎躯一震的代码&#xff0c;因为有时候你根本不知道它是干嘛的&#xff0c;甚至觉得它毫无用处&#xff0c;关键是 还绝对不能动&#xff0c;碰一段改半年&#xff0c;别问我怎么知道的。最讽刺的是&#xff0c;你可能为了修改代码&#xff0c…

设计模式之迭代器

迭代器模式介绍集合的结构迭代器模式是一种行为设计模式&#xff0c;让你能在不暴露集合底层表现形式(列表、栈、树等)的情况下遍历集合中所有的元素。迭代器模式满足了单一职责和开闭原则&#xff0c;外界的调用方也不需要知道任何一个不同的数据结构在使用上的遍历差异。迭代…

倒啤酒竟能拿到诺贝尔物理学大奖!明明是普通操作,凭什么这么强?

全世界只有3.14 % 的人关注了青少年数学之旅倒啤酒&#xff0c;是艺术&#xff0c;更是一门学问。每个初来社会报道的男孩&#xff0c;都必须掌握这个酷炫技能。它是从古自今的文化传承&#xff0c;也是一个男人成熟的标志。向快手老铁致敬然而&#xff0c;理想很丰满&#xff…

铁山靠之——HarmonyOS基础 - 1.0

HarmonyOS学习第一章 一、HarmonyOS简介1.1 安装和使用DevEco Studio1.2 环境配置1.3 项目创建1.4 运行程序1.5 基本工程目录1.5.1 工程级目录1.5.2 模块级目录1.5.3 app.json51.5.4 module.json51.5.5 main_pages.json 二、TypeScript快速入门2.1 简介2.2 基础类型2.2.1 布尔值…

vb.net2.0 Hmac-md5加密算法

2019独角兽企业重金招聘Python工程师标准>>> <summary> Hmac-md5加密算法。 </summary> <param name"APassWord">加密串(即密码)</param> <param name"ASourceStr">原始字符串</param> <returns>&l…

解决VS2010 beta2 安装后html标签和script智能提示不起作用的问题

此文已经移至&#xff1a;解决VS2010 beta2 安装后html标签和script智能提示不起作用的问题 安装VS2010 beta2 后&#xff0c;发现正常的html标签的智能提示不起作用&#xff0c;比如<a>,<p>&#xff0c;还有在<script>里面也没有了js的智能提示。 解决办法…

初级Java开发面试必问项!!! 标识符、字面值、变量、数据类型,该学学了!

最近事情太多&#xff0c;没太时间写博客。今天抽空再整理整理面试中的那点事吧&#xff0c;帮助那些正在找工作或想跳槽找工作的学弟学妹们。 前面我己写过多篇推文&#xff0c;相信看过我文章的伙伴们已经了解掌握了不少。从目前流行的开发技术、常见的面试问题以及问题的答…

你还记得当初是怎么对我的吗? | 今日最佳

全世界只有3.14 % 的人关注了青少年数学之旅&#xff08;图源阿粪青&#xff0c;侵权删&#xff09;

4项技巧使你不再为PHP中文编码苦恼

2019独角兽企业重金招聘Python工程师标准>>> PHP程序设计中中文编码问题曾经困扰很多人&#xff0c;导致这个问题的原因其实很简单&#xff0c;每个国家(或区域)都规定了计算机信息交换用的字符编码集&#xff0c;如美国的扩展 ASCII 码&#xff0c;中国的 GB2312-8…