asp.net cookie操作-添加cookie,添加键值,移除cookie,移除键值

原创 2012年03月22日 18:10:27
public class Cookies
{
	/// <summary>
	/// 添加cookie
	/// </summary>
	/// <param name="cookieName"></param>
	/// <param name="value"></param>
	public static void Add(string cookieName, string value)
	{
		HttpCookie cookie = new HttpCookie(HttpUtility.UrlEncode(cookieName), HttpUtility.UrlEncode(value));
		HttpContext.Current.Response.AppendCookie(cookie);
	}

	/// <summary>
	/// 给指定的cookie的指定键添加值
	/// </summary>
	/// <param name="cookieName">cookie的名称</param>
	/// <param name="keyName">要添加的键</param>
	/// <param name="value">要添加的值</param>
	public static void Add(string cookieName, string keyName, string value)
	{
		HttpCookie cookie = HttpContext.Current.Request.Cookies[cookieName];
		//如果cookie=null则新建一个cookie
		if (cookie == null)
			cookie = new HttpCookie(HttpUtility.UrlEncode(cookieName));
		//如果该键不存在,则新建一个键值并赋值;否则直接赋值
		if (string.IsNullOrEmpty(cookie.Values[keyName]))
			cookie.Values.Add(keyName, HttpUtility.UrlEncode(value));
		else
			cookie.Values[keyName] = HttpUtility.UrlEncode(value);

		HttpContext.Current.Response.AppendCookie(cookie);
	}

	/// <summary>
	/// 读取Cookie
	/// </summary>
	/// <param name="key"></param>
	/// <returns></returns>
	public static string GetValue(string cookieName)
	{
		string value = HttpContext.Current.Request.Cookies[HttpUtility.UrlEncode(cookieName)].Value;
		return string.IsNullOrEmpty(value) ? string.Empty : HttpUtility.UrlDecode(value);
	}

	/// <summary>
	/// 读取指定Cookie里的指定键的值
	/// </summary>
	/// <param name="cookieName">cookie名称</param>
	/// <param name="keyName">cookie的键</param>
	/// <returns></returns>
	public static string GetValue(string cookieName, string keyName)
	{
		HttpCookie cookie = HttpContext.Current.Request.Cookies[HttpUtility.UrlEncode(cookieName)];
		if (cookie == null)
			return string.Empty;
		string value = cookie.Values[HttpUtility.UrlEncode(keyName)];
		return string.IsNullOrEmpty(value) ? string.Empty : HttpUtility.UrlDecode(value);
	}

	/// <summary>
	/// 获取指定cookie中所有的键
	/// </summary>
	/// <param name="cookieName"></param>
	/// <returns></returns>
	public static string[] GetValues(string cookieName)
	{
		if (HttpContext.Current.Request.Cookies[cookieName] == null)
			return new string[0];
		string[] keys = HttpContext.Current.Request.Cookies[cookieName].Values.AllKeys;
		for (int i = 0; i < keys.Length; i++)
		{
			keys[i] = HttpUtility.UrlDecode(keys[i]);
		}
		return keys;
	}

	/// <summary>
	/// 移除指定的Cookie
	/// </summary>
	/// <param name="cookieName"></param>
	public static void Remove(string cookieName)
	{
		HttpContext.Current.Response.Cookies.Remove(HttpUtility.UrlEncode(cookieName));
		HttpContext.Current.Response.Cookies[HttpUtility.UrlEncode(cookieName)].Expires = DateTime.Now.AddDays(-1);
	}
	/// <summary>
	/// 移除cookie中指定的键,若是最后一个键则移除这个cookie
	/// </summary>
	/// <param name="cookieName"></param>
	/// <param name="keyName"></param>
	public static void Remove(string cookieName, string keyName)
	{
		HttpCookie cookie = HttpContext.Current.Request.Cookies[cookieName];
		if (cookie != null)
		{
			if (cookie.Values.Count > 0)
			{
				if (cookie.Values.Count == 1)
				{
					//若是最后一个键则移除这个cookie,否则会多出一个空值
					cookie.Values.Remove(HttpUtility.UrlEncode(keyName));
					cookie.Expires = DateTime.Now.AddDays(-1);
				}
				else
				{
					cookie.Values.Remove(HttpUtility.UrlEncode(keyName));
				}
				HttpContext.Current.Response.Cookies.Add(cookie);
			}
		}
	}
}

首先要了解Cookie是存在客户端的。

添加cookie是向客户端添加cookie,所以要用(Response)HttpContext.Current.Response.AppendCookie(cookie);

获取cookie是获取客户端提交上来的cookie,所以要用(Request)HttpContext.Current.Request.Cookies[cookieName];

服务器端没有权限删除客户端上的文件,所以服务器端,不能删除cookie。但可以让浏览器删除,即让cookie过期。

关于cookie读取中文cookie时出现乱码:存储中文时要进行编码,读取中文时则进行解码,这样可以避免出现乱码。

cookie中存储数据的格式是以值键对的形式存储的:即 key1=value1&key2=value2;

所以

cookie.Values.Add(key1, value1);
和
cookie.Value=cookie.Value+"&key1=value1"
是等同的。但是后者在Request.Cookies[cookieName].Values.Count时则会变成1。
可能是加上新值之后编码不一所以count的时候变成了1


版权声明:本文为博主原创文章,未经博主允许不得转载。

C# Asp.Net Cookie正确删除方法

Cookie删除老是报错,标准方法如下 HttpContext.Response.Cookies["_token"].Expires = DateTime.Now.AddDays(-1); 一般我...

ASP.NET cookie 操作详解cookie 写入、读取、修改、删除

//写入    protected void Button2_Click(object sender, EventArgs e)     {         HttpCookie cookie=new...

asp.net Cookie请求头以及响应头值的获取

今天的内容还得接着昨天的文章继续讲解。上篇文章,我遇到了如何进行同名Cookie值的设置。在上一篇文章中,我设置的Cookie名字是一定的,写死了。今天再次运行项目时发现报错了,单步运行程序发现Coo...

asp.net对cookie的操作(前台js和后台c#代码)

后台C#代码对cookie的操作: 看一下代码 ///////////////////////////////-----cookie创建\设置的操作----//////////...

Asp.net, cookie操作

Cookie是一段文本信息,在客户端存储 Cookie 是 ASP.NET 的会话状态将请求与会话关联的方法之一。Cookie 也可以直接用于在请求之间保持数据,但数据随后将存储在客户端并随每个请求一...
  • lhy2199
  • lhy2199
  • 2012年01月10日 15:38
  • 500

ASP.NET 操作Cookie详解 增加,修改,删除

ASP.NET 操作Cookie详解 增加,修改,删除 Cookie,有时也用其复数形式Cookies,指某些网站为了辨别用户身份而储存在用户本地终端上的数据(通常经过加密)。定义于RFC210...

ASP.NET 下的Cookie和Session 简单介绍与操作

cookie :     1、cookie是存在客户端(浏览器)的进程内存中和客户端所在的机器硬盘上     2、cookie只能能够存储少量文本,大概4K大小     3、cookie是不能...
  • KZWRCOM
  • KZWRCOM
  • 2015年11月20日 10:25
  • 215

ASP.NET实现Cookie功能的三个基本操作(写入,读取,删除)

简而言之,在Cookie的时候有三个过程,分别是“写入,读取,删除”。任何伟大之作都是有基本的东西构成的,而Cookie的运用也不例外。   写入:     1...

ASP.Net和JS对Cookie的互操作问题

      首先看一下下面的Cookie简明参考:(来自:http://www.builder.com.cn/2007/1024/576287.shtml)  一 写入Cookie  1. Name ...
  • xwnxwn
  • xwnxwn
  • 2011年02月17日 11:08
  • 893

ASP.NET 操作Cookie详解 增加,修改,删除 .

Cookie,有时也用其复数形式Cookies,指某些网站为了辨别用户身份而储存在用户本地终端上的数据(通常经过加密)。定义于RFC2109。它是网景公司的前雇员Lou Montulli在1993年3...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:asp.net cookie操作-添加cookie,添加键值,移除cookie,移除键值
举报原因:
原因补充:

(最多只允许输入30个字)