ASP.NET实现Cookie功能的三个基本操作(写入,读取,删除)
来源:互联网 发布:数控车床编程100例 编辑:程序博客网 时间:2024/06/05 08:25
1 //创建一个HttpCookie对象 2 HttpCookie cookie = new HttpCookie("RON"); 3 //设定此cookies值 4 cookie.Value = "我叫小魏"; 5 //设定cookie的生命周期,在这里定义为三分钟 6 DateTime dtNow = DateTime.Now; 7 TimeSpan tsMinute = new TimeSpan(0, 0, 3, 0); 8 cookie.Expires = dtNow + tsMinute; 9 cookie["Name"] = "小魏";10 cookie["Sex"] = "男";11 cookie["Age"] = "22";12 //加入此cookie13 Response.Cookies.Add(cookie);14 Response.Write("Cookie创建完毕");
HttpCookie 在 System.Web 这个命名空间里面,所以你需要引用
1 using System.Web;
*创建Cookie
创建Cookie的时候必须指定Cookie的Name和Value。在例子中,cookie 的Name是“RON”,Value是“我叫小魏”!cookie是保存在浏览器当中的,而每个Cookie的区别是根据Name这个属性的值来确定的。所以,如果Name相同,Cookie的内容将被覆盖。而那些cookie["Name"]等等是cookie["RON"]的子键。
*Cookie有效期
Cookie的另外一个重要的属性是有效期。通过属性Expires设置。例子中,cookie设置的有效期为三分钟。目前为止,最长的有效期是50年,这是那个丫地设定的啊。有50年的公司都不错了。其实在有效期的设置上我更喜欢这句话。
cookie.Expires = DateTime.Now.AddMinutes(3);
简单,容易理解。
在有效期的问题上,有两个时间比较特殊:
#永久性 Cookie 设置永远不过期 最长为50年
#非永久性 Cookie 不设置有效期 关闭浏览器即消失
*多值cookie
Cookie可以保存多个值,你只要创建一个带子键的Cookie就可以了。例如
1 HttpCookie aCookie = new HttpCookie("userInfo");2 aCookie.Values["userName"] = "rond";3 aCookie.Values["lastVisit"] = DateTime.Now.ToString();4 aCookie.Expires = DateTime.Now.AddDays(1);
例子中创建了一个Name为userInfo的Cookie,而且此Cookie还带有两个子键。
*Cookie的范围
默认情况下,Cookie的整个站点都是有效的。意思就是说,在同一个站点(也可以理解成同一个域名)下的所有网页都是可以获取到Cookie的。如果你不希望你的Cookie在所有范围都有效。你可以限定Cookie的范围。方法是通过Cookie的Path属性,属性值为范围所在的路径,相对路径有效。譬如
1 appCookie.Path = "/Application1";
除了限定Cookie的路径范围,还可以用Cookie的Domain属性限定Cookie的域名范围。例如
1 appCookie.Domain = "jsjx.gdufs.edu.cn";
例子中将cookie限定在“广东外语外贸大学”的“信息学院”(jsjx.gdufs.edu.cn)网站下,而不会再“广东外语外贸大学”(gdufs.edu.cn)的主网站上面产生效果。
*提交Cookie
Cookie是保存在浏览器的东西,所以需要提交才能将信息保存在浏览器当中。
1 Response.Cookies.Add(aCookie);
这样就可以将数据保存在浏览器当中了。
PS:Cookie的创建还有另外一种方式,可以参考MSDN的说明。
读取:
先来个例子
//获得cookie HttpCookie cookie = Request.Cookies["RON"]; //确定是否存在用户输入的cookie if (null == cookie) { Response.Write("没有发现指定的cookie!"); } else { //找到指定的cookie,显示cookie的值 String strCookieValue = cookie.Value.ToString(); Response.Write( " cookie 的值为: " + strCookieValue + " <br >"); Response.Write(cookie["UserName"]); }
*获取
通过Request响应,我们可以获取到Request.Cookies["RON"].根据原本的设定可以将Cookie的值读取出来。cookie.Value可以获取到Cookie保存的所有值。不过个人比较喜欢cookie["UserName"]的方式获取自己想要的cookie的值。
如果你是通过多值设置了Cookie的子键。那么获取方式和设定方式是差不多的。
*读取多个Cookie
在一个浏览器上面,可能保存了不止一个cookie。但是怎么获取所有的cookie呢。写个循环就出来了。
for (int i = 0; i < Request.Cookies.Count; i++) { Response.Write("Cookie[" + i + "]的Name为:" + Request.Cookies[i].Name + "<br/>"); Response.Write("Cookie[" + i + "]的Value为:" + Request.Cookies[i].Value + "<br/>"); }
如果你不想把子键的键/值都显现在一起,而想单个获取。也可以写个循环全部显示出来。
//显示子键 for (int i = 0; i < Request.Cookies.Count; i++) { Response.Write("Cookie[" + i + "]的Name为:" + Request.Cookies[i].Name + "<br/>"); if (Request.Cookies[i].HasKeys) { for (int j = 0; j < Request.Cookies[i].Values.Count; j++) { Response.Write("Cookie[" + i + "][" + j + "]的Name为:" + Request.Cookies[i].Values.AllKeys[j] + "<br/>"); Response.Write("Cookie[" + i + "][" + j + "]的Value为:" + Request.Cookies[i].Values[j] + "<br/>"); } } }
删除:
Cookie保存在浏览器端,保存时间是开发者设定的时间,当时间过期时,浏览器端就会删除Cookie。所以删除Cookie的工作就是将Cookie的有效期设置过期即可。你可以设置有效期为当前时间,Cookie立即过期。也可以设置过去的时间,Cookie也会被删除。
如例子,我当初创建了一个叫做RON的Cookie,现在我要删除它。所以要新建一个同名的Cookie,时间设置为过去。
*删除某一个Cookie
HttpCookie aCookie= new HttpCookie("RON"); aCookie.Expires = DateTime.Now.AddDays(-1); Response.Cookies.Add(aCookie);
这样就可以将Cookie["RON"]删除。
可能你不记得你在测试的时候浏览器端到底保存了多少个Cookie,你可以写个循环将Cookie全部删除掉。
*删除所有Cookie
//删除全部Cookie for (int i = 0; i < Request.Cookies.Count; i++) { string cookiesName = Request.Cookies[i].Name; HttpCookie cookie = new HttpCookie(cookiesName); cookie.Expires = DateTime.Now.AddDays(-1); Response.Cookies.Add(cookie); }
*修改
其实修改和删除一样的,都是新建一个同名Cookie,只不过删除设置的时间是过去的或者当前,修改就可以设置时间为新的一个有效期,内容也可以重新定义,这样就会覆盖浏览器端的内容。就不打代码了。
测试用例
Test.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Test.aspx.cs" Inherits="Test" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head runat="server"> <title></title></head><body> <form id="form1" runat="server"> Cookie名称:<asp:TextBox ID="NameField" runat="server" /> <br> Cookie的值:<asp:TextBox ID="ValueField" runat="server" /> <br> <asp:Button ID="Button1" Text="创建Cookie" OnClick="WriteClicked" runat="server" /> <br> <asp:button ID="Button2" text = "读取cookie" onclick = "ReadClicked" runat = "server" /> <br /> <asp:Button ID="Button3" runat="server" onclick="Button3_Click" Text="测试" /> <br /> <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label> </form></body></html>
Test.aspx.cs
using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.UI;using System.Web.UI.WebControls;public partial class Test : System.Web.UI.Page{ protected void Page_Load(object sender, EventArgs e) { } protected void WriteClicked(object sender, EventArgs e) { //创建一个HttpCookie对象 HttpCookie cookie = new HttpCookie("jsjx"); //设定此cookies值 cookie.Value = "GDUFS的值"; //设定cookie的生命周期,在这里定义为一个小时 DateTime dtNow = DateTime.Now; TimeSpan tsMinute = new TimeSpan(0, 0, 3, 0); cookie.Expires = dtNow + tsMinute; cookie["姓名"] = "王天"; cookie["性别"] = "男"; cookie["年龄"] = "26"; //加入此cookie Response.Cookies.Add(cookie); Response.Write(NameField.Text + "Cookie创建完毕 <br > <hr > "); } protected void ReadClicked(Object Sender, EventArgs e) { //得到用户输入的cookie名称 String strCookieName = "11"; //获得cookie HttpCookie cookie = Request.Cookies[strCookieName]; //确定是否存在用户输入的cookie if (null == cookie) { Response.Write("没有发现指定的cookie <br > <hr > "); } else { //找到指定的cookie,显示cookie的值 String strCookieValue = cookie.Value.ToString(); Response.Write(strCookieName + " cookie 的值为: <b > " + strCookieValue + " </b > <br > <hr > "); Response.Write(cookie["姓名"]); } } protected void Button3_Click(object sender, EventArgs e) { System.Text.StringBuilder output = new System.Text.StringBuilder(); HttpCookie aCookie; //循环输出Cookie的内容(1) //for (int i = 0; i < Request.Cookies.Count; i++) //{ // aCookie = Request.Cookies[i]; // output.Append("Cookie name = " + Server.HtmlEncode(aCookie.Name) // + "<br />"); // output.Append("Cookie value = " + Server.HtmlEncode(aCookie.Value) // + "<br /><br />"); //} //Label1.Text = output.ToString(); //循环输出Cookie的内容(2) //for (int i = 0; i < Request.Cookies.Count; i++) //{ // Response.Write("Cookie[" + i + "]的Name为:" + Request.Cookies[i].Name + "<br/>"); // Response.Write("Cookie[" + i + "]的Value为:" + Request.Cookies[i].Value + "<br/>"); //} //显示子键(1) //for (int i = 0; i < Request.Cookies.Count; i++) //{ // aCookie = Request.Cookies[i]; // output.Append("Name = " + aCookie.Name + "<br />"); // if (aCookie.HasKeys) // { // for (int j = 0; j < aCookie.Values.Count; j++) // { // string subkeyName = Server.HtmlEncode(aCookie.Values.AllKeys[j]); // string subkeyValue = Server.HtmlEncode(aCookie.Values[j]); // output.Append("Subkey name = " + subkeyName + "<br />"); // output.Append("Subkey value = " + subkeyValue + // "<br /><br />"); // } // } // else // { // output.Append("Value = " + Server.HtmlEncode(aCookie.Value) + // "<br /><br />"); // } //} //Label1.Text = output.ToString(); ////显示子键(2) //for (int i = 0; i < Request.Cookies.Count; i++) //{ // Response.Write("Cookie[" + i + "]的Name为:" + Request.Cookies[i].Name + "<br/>"); // if (Request.Cookies[i].HasKeys) // { // for (int j = 0; j < Request.Cookies[i].Values.Count; j++) // { // Response.Write("Cookie[" + i + "][" + j + "]的Name为:" + Request.Cookies[i].Values.AllKeys[j] + "<br/>"); // Response.Write("Cookie[" + i + "][" + j + "]的Value为:" + Request.Cookies[i].Values[j] + "<br/>"); // } // } //} //for (int i = 0; i < Request.Cookies.Count; i++) //{ // aCookie = Request.Cookies[i]; // output.Append("Name = " + aCookie.Name + "<br />"); // if (aCookie.HasKeys) // { // for (int j = 0; j < aCookie.Values.Count; j++) // { // subkeyName = Server.HtmlEncode(aCookie.Values.AllKeys[j]); // subkeyValue = Server.HtmlEncode(aCookie.Values[j]); // output.Append("Subkey name = " + subkeyName + "<br />"); // output.Append("Subkey value = " + subkeyValue + // "<br /><br />"); // } // } // else // { // output.Append("Value = " + Server.HtmlEncode(aCookie.Value) + // "<br /><br />"); // } //} //Label1.Text = output.ToString(); //删除全部Cookie string cookieName; int limit = Request.Cookies.Count; for (int i = 0; i < limit; i++) { cookieName = Request.Cookies[i].Name; aCookie = new HttpCookie(cookieName); aCookie.Expires = DateTime.Now.AddDays(-1); Response.Cookies.Add(aCookie); } //删除全部Cookie for (int i = 0; i < Request.Cookies.Count; i++) { string cookiesName = Request.Cookies[i].Name; HttpCookie cookie = new HttpCookie(cookiesName); cookie.Expires = DateTime.Now.AddDays(-1); Response.Cookies.Add(cookie); } }}
Cookie的“Value”=“hyloginstate=success, &hybh=J15010710453125&hyqq=”部分无效。
既然是提示Values值部分无效,解决方向就可以大致确定了。我首先是拿到了对方真实网站上的Cookie数据信息。user Cookie的Value如下:
user=hyloginstate=success!&hybh=J15010710453125&hyqq=
分析两者,发现两者还真是有细微的差别,于是我索性就偷懒了一次,直接修改了程序中Cookie的value值,再次运行程序,还是不行。没法,上网找答案。原来,在C#语言中,Cookie的value中是不能有逗号的,这样会报"xxxxxxxx"无效的异常。
解决方案就是把逗号进行utf-8编码为%2c。修改程序中的value值,最终数据提交成功。
- ASP.NET实现Cookie功能的三个基本操作(写入,读取,删除)
- ASP.NET实现Cookie功能的三个基本操作(写入,读取,删除)
- ASP.NET cookie 操作详解cookie 写入、读取、修改、删除
- ASP.NET cookie 操作详解cookie 写入、读取、修改、删除
- ASP.NET cookie 操作详解|cookie 写入、读取、修改、删除
- asp.net cookie的操作,写入、读取与操作
- asp.net cookie的操作,写入、读取与操作
- JavaScript实现cookie的写入、读取、删除功能
- ASP.NET写入 、读取 、 删除、追加cookie数组
- 转贴:ASP.NET- Cookie操作详解(写入、读取、修改)
- asp.net 写入cookie,js读取cookie
- Jquery cookie操作示例,写入cookie,读取cookie,删除cookie
- javascript读取cookie,javascrip写入cookie,asp.net读取cookie,asp.net写入cookie
- javascript读取cookie,javascrip写入cookie,asp.net读取cookie,asp.net写入cookie
- javascript读取cookie,javascrip写入cookie,asp.net读取cookie,asp.net写入cookie
- ASP.NET中cookie的基本操作
- asp.net中对xml的读取,写入,删除
- asp.net cookies 读取、写入、修改、删除
- Android设置监听器
- hdu6047 Maximum Sequence
- 优荐MQ
- next数组完美诠释
- 题目1168:字符串的查找删除
- ASP.NET实现Cookie功能的三个基本操作(写入,读取,删除)
- 【CC2640R2F】利用UniFlash在macOS下搭建CC2640R2F蓝牙5.0烧录环境
- Unix/Linux入门学习170725知识点备忘总结*3
- linux基本命令及操作7(ssh server)
- CloudStack的部署架构概览
- null instanceof object
- Clarke and number 【sqrt精度+打表找规律】
- 微信扫二维码营销软件 系统开发
- 外边距和内边距