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

本文详细介绍了如何在.NET框架中使用Cookie,包括添加、读取、移除Cookie及其值的方法,特别注意了中文Cookie的编码和解码问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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


### 如何将 VirtualBox 虚拟机存储位置设置为 D 盘 通过调整 VirtualBox 的全局配置以及手动迁移现有虚拟机文件的方式,可以实现将虚拟机的存储位置更改为 D 盘。以下是具体的操作说明: #### 修改默认存储路径 进入 VirtualBox 工具栏中的 **“管理”** 功能模块,在其中找到并打开 **“全局设定”** 页面[^2]。在此页面中,可以通过更改默认的虚拟机存储目录来指定新的路径(例如 `D:\VirtualMachines`)。完成此操作后,后续创建的新虚拟机会自动保存至该新路径下。 #### 迁移已有虚拟机到目标驱动器 对于已经存在的虚拟机实例,如果它们当前位于 C 盘,则需执行以下步骤将其迁移到 D 监: 1. 手动复制现有的 `.vbox` 和对应的 `.vdi` 文件夹至期望的目标位置 (比如 D:); 2. 使用命令行工具或者图形界面重新注册这些已移动过的机器回 VirtualBox 中去;注意此时可能还需要更新某些内部链接地址以匹配实际变动后的物理存放地点情况。 此外,在整个过程中确保完全关闭所有运行状态下的相关联程序和服务是非常重要的一步措施之一[^3] ,这样能够有效防止数据丢失或损坏等问题的发生几率降到最低限度之内。 ```bash VBoxManage modifyhd "path_to_your_vdi_file_on_D_drive.vdi" --resize new_size_in_MB ``` 上述脚本展示了如何利用 VBoxManage 命令扩展 VDI 镜像大小的例子 。这同样适用于当您希望增加分配给特定操作系统使用的硬盘空间容量时的情境之下应用起来非常方便快捷而且效率极高。 最后提醒一下关于不同平台之间互相转换的时候要注意兼容性问题[^4], 特别是在涉及到硬件抽象层差异较大的场景下面临挑战更大一些.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值