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

  1 public class Cookies
  2 {
  3     /// <summary>
  4     /// 添加cookie
  5     /// </summary>
  6     /// <param name="cookieName"></param>
  7     /// <param name="value"></param>
  8     public static void Add(string cookieName, string value)
  9     {
 10         HttpCookie cookie = new HttpCookie(HttpUtility.UrlEncode(cookieName), HttpUtility.UrlEncode(value));
 11         HttpContext.Current.Response.AppendCookie(cookie);
 12     }
 13 
 14     /// <summary>
 15     /// 给指定的cookie的指定键添加值
 16     /// </summary>
 17     /// <param name="cookieName">cookie的名称</param>
 18     /// <param name="keyName">要添加的键</param>
 19     /// <param name="value">要添加的值</param>
 20     public static void Add(string cookieName, string keyName, string value)
 21     {
 22         HttpCookie cookie = HttpContext.Current.Request.Cookies[cookieName];
 23         //如果cookie=null则新建一个cookie
 24         if (cookie == null)
 25             cookie = new HttpCookie(HttpUtility.UrlEncode(cookieName));
 26         //如果该键不存在,则新建一个键值并赋值;否则直接赋值
 27         if (string.IsNullOrEmpty(cookie.Values[keyName]))
 28             cookie.Values.Add(keyName, HttpUtility.UrlEncode(value));
 29         else
 30             cookie.Values[keyName] = HttpUtility.UrlEncode(value);
 31 
 32         HttpContext.Current.Response.AppendCookie(cookie);
 33     }
 34 
 35     /// <summary>
 36     /// 读取Cookie
 37     /// </summary>
 38     /// <param name="key"></param>
 39     /// <returns></returns>
 40     public static string GetValue(string cookieName)
 41     {
 42         string value = HttpContext.Current.Request.Cookies[HttpUtility.UrlEncode(cookieName)].Value;
 43         return string.IsNullOrEmpty(value) ? string.Empty : HttpUtility.UrlDecode(value);
 44     }
 45 
 46     /// <summary>
 47     /// 读取指定Cookie里的指定键的值
 48     /// </summary>
 49     /// <param name="cookieName">cookie名称</param>
 50     /// <param name="keyName">cookie的键</param>
 51     /// <returns></returns>
 52     public static string GetValue(string cookieName, string keyName)
 53     {
 54         HttpCookie cookie = HttpContext.Current.Request.Cookies[HttpUtility.UrlEncode(cookieName)];
 55         if (cookie == null)
 56             return string.Empty;
 57         string value = cookie.Values[HttpUtility.UrlEncode(keyName)];
 58         return string.IsNullOrEmpty(value) ? string.Empty : HttpUtility.UrlDecode(value);
 59     }
 60 
 61     /// <summary>
 62     /// 获取指定cookie中所有的键
 63     /// </summary>
 64     /// <param name="cookieName"></param>
 65     /// <returns></returns>
 66     public static string[] GetValues(string cookieName)
 67     {
 68         if (HttpContext.Current.Request.Cookies[cookieName] == null)
 69             return new string[0];
 70         string[] keys = HttpContext.Current.Request.Cookies[cookieName].Values.AllKeys;
 71         for (int i = 0; i < keys.Length; i++)
 72         {
 73             keys[i] = HttpUtility.UrlDecode(keys[i]);
 74         }
 75         return keys;
 76     }
 77 
 78     /// <summary>
 79     /// 移除指定的Cookie
 80     /// </summary>
 81     /// <param name="cookieName"></param>
 82     public static void Remove(string cookieName)
 83     {
 84         HttpContext.Current.Response.Cookies.Remove(HttpUtility.UrlEncode(cookieName));
 85         HttpContext.Current.Response.Cookies[HttpUtility.UrlEncode(cookieName)].Expires = DateTime.Now.AddDays(-1);
 86     }
 87     /// <summary>
 88     /// 移除cookie中指定的键,若是最后一个键则移除这个cookie
 89     /// </summary>
 90     /// <param name="cookieName"></param>
 91     /// <param name="keyName"></param>
 92     public static void Remove(string cookieName, string keyName)
 93     {
 94         HttpCookie cookie = HttpContext.Current.Request.Cookies[cookieName];
 95         if (cookie != null)
 96         {
 97             if (cookie.Values.Count > 0)
 98             {
 99                 if (cookie.Values.Count == 1)
100                 {
101                     //若是最后一个键则移除这个cookie,否则会多出一个空值
102                     cookie.Values.Remove(HttpUtility.UrlEncode(keyName));
103                     cookie.Expires = DateTime.Now.AddDays(-1);
104                 }
105                 else
106                 {
107                     cookie.Values.Remove(HttpUtility.UrlEncode(keyName));
108                 }
109                 HttpContext.Current.Response.Cookies.Add(cookie);
110             }
111         }
112     }
113 }

首先要了解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;

所以

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

 

转载于:https://www.cnblogs.com/a-dou/articles/5310693.html

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

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

相关文章

export/set 环境变量读取对应配置

我们有时候不希望将配置参数写在代码里&#xff0c;而作为单独的文件传入 一种办法是设置环境变量参数&#xff0c;根据这个参数来决定读取哪个配置文件 # _*_ coding: utf-8 _*_ # Time : 2022/7/6 18:03 # Author : Michael # File : os_environ.py # desc : import osdef …

七、Web服务器——Junit单元测试 反射 注解学习笔记

今日内容 1. Junit单元测试 2. 反射 3. 注解Junit单元测试&#xff1a; * 测试分类&#xff1a;1. 黑盒测试&#xff1a;不需要写代码&#xff0c;给输入值&#xff0c;看程序是否能够输出期望的值。2. 白盒测试&#xff1a;需要写代码的。关注程序具体的执行流程。* Junit使…

ViewPager+Fragment,Fragment会预加载的问题

http://www.bubuko.com/infodetail-535920.html 在Fragmetn里&#xff0c;onCreateView去加载布局&#xff0c;真正的加载数据通过这个方法setUserVisibleHint&#xff08;boolean isVisibleToUser&#xff09;&#xff0c;isVisibleToUser表示当前Fragment是否处于可见状态&am…

第一个React Web应用程序

learn from 《React全家桶&#xff1a;前端开发与实例详解》 https://zh-hans.reactjs.org/tutorial/tutorial.html https://zh-hans.reactjs.org/docs/create-a-new-react-app.html#create-react-app 安装 Node.js安装 npm install -g live-server&#xff0c;配置环境变量 p…

一、第一个注解的 SpringMVC 程序

ch01-hello-springmvc:第一个注解的springmvc项目 所谓 SpringMVC 的注解式开发是指&#xff0c;在代码中通过对类与方法的注解&#xff0c;便可完成处理器 在 springmvc 容器的注册。注解式开发是重点。 需求&#xff1a;用户再页面发起一个请求&#xff0c;请求交给spring…

第三次作业:PSP耗时

PSP个人项目耗时对比记录表&#xff1a;四则运算 Personal Software Process StagesTime(%)Planning7 Estimate9开发76 •需求分析 6 •生成设计文档 7 •设计复审&#xff08;和同事审核设计文档&#xff09; 6 •代码规范&#xff08;为目前的开发制定合适的规范&…

二、SpringMVC 注解式开发学习笔记

1、RequestMapping 定义请求规则 通过RequestMapping 注解可以定义处理器对于请求的映射规则。该注解可以注解在方法上&#xff0c;也可以注解在类上&#xff0c;但意义是不同的。value 属性值常以“/”开始。 RequestMapping 的 value 属性用于定义所匹配请求的 URI。但对于注…

LeetCode 2315. 统计星号(字符串)

文章目录1. 题目2. 解题1. 题目 给你一个字符串 s &#xff0c;每 两个 连续竖线 | 为 一对 。 换言之&#xff0c;第一个和第二个 | 为一对&#xff0c;第三个和第四个 | 为一对&#xff0c;以此类推。 请你返回 不在 竖线对之间&#xff0c;s 中 * 的数目。 注意&#xff…

MinerConfig.java 爬取配置类

MinerConfig.java 爬取配置类 package com.iteye.injavawetrust.miner;import java.util.List;/*** 爬取配置类* author InJavaWeTrust**/ public class MinerConfig {/*** URL包含关键字*/public List<String> keys;/*** 存储方式 */public StoreType storeType;/*** 爬…

PyCharm集成Anaconda3环境下安装 腾讯优图报错 ERROR: Could not install packages due to an EnvironmentError

一、报错截图如下&#xff1a; ERROR: Could not install packages due to an EnvironmentError: [Errno 2] No such file or directory: ‘C:\Users\Zep\Python_sdk-master.zip’ 我首先是从官网下载了Python_sdk&#xff0c;然后直接把Python_sdk文件夹放在了Anaconda3的文…

LeetCode 2319. 判断矩阵是否是一个 X 矩阵

文章目录1. 题目2. 解题1. 题目 如果一个正方形矩阵满足下述 全部 条件&#xff0c;则称之为一个 X 矩阵 &#xff1a; 矩阵对角线上的所有元素都 不是 0矩阵中所有其他元素都是 0 给你一个大小为 n x n 的二维整数数组 grid &#xff0c;表示一个正方形矩阵。 如果 grid 是…

ABP框架详解(八)动态ApiController的生成和访问机制

在ABP框架中提供了一套动态生成ApiController的机制&#xff08;依然支持原生ApiController的使用方式&#xff09;&#xff0c;虽然说是动态生成ApiController但是实际上并没有真正在启动程序的时候生成任何ApiController类的子类&#xff0c;客户端所有对动态控制器的访问都集…

三、Java Web中出现的一些乱码问题总结(详解)

一、response.getWriter().write(&#xff09;和 response.getWriter().print(&#xff09;的区别 response.getWriter()返回的是PrintWriter&#xff0c;这是一个打印输出流 response.getWriter().write(&#xff09;和 response.getWriter().print(&#xff09;是响应给客户…

LeetCode 2325. 解密消息(map)

文章目录1. 题目2. 解题1. 题目 给你字符串 key 和 message &#xff0c;分别表示一个加密密钥和一段加密消息。 解密 message 的步骤如下&#xff1a; 使用 key 中 26 个英文小写字母第一次出现的顺序作为替换表中的字母 顺序 。将替换表与普通英文字母表对齐&#xff0c;形…

结对项目——最大子数组

求数组中最大子数组的和 一、程序要求 1、返回一个整数数组中最大子数组的和&#xff1b; 2、输入一个整数数组&#xff0c;数组中有正数也有负数&#xff1b; 3、数组中连续的一个或多个整数组成一个子数组&#xff0c;每个子数组都有一个和&#xff1b; 4、求所有子数组的和的…

python的GUI编程和tkinter学习笔记——第一个GUI程序

一、第一个GUI程序 from tkinter import * from tkinter import messagebox# 创建窗口 root Tk()btn01 Button(root) btn01["text"] "点我就送花"btn01.pack()def songhua(e): # e就是事件对象messagebox.showinfo("Message","送你一朵…

LeetCode 2331. 计算布尔二叉树的值(树的遍历)

文章目录1. 题目2. 解题1. 题目 给你一棵 完整二叉树 的根&#xff0c;这棵树有以下特征&#xff1a; 叶子节点 要么值为 0 要么值为 1 &#xff0c;其中 0 表示 False &#xff0c;1 表示 True 。非叶子节点 要么值为 2 要么值为 3 &#xff0c;其中 2 表示逻辑或 OR &#…

linux内核启动以及文件系统的加载过程

Linux 内核启动及文件系统加载过程 当u-boot 开始执行 bootcmd 命令&#xff0c;就进入 Linux 内核启动阶段。普通 Linux 内核的启动过程也可以分为两个阶段。本文以项目中使用的 linux-2.6.37 版源码为例分三个阶段来描述内核启动全过程。第一阶段为内核自解压过程&#xff0c…

LeetCode 2335. 装满杯子需要的最短总时长

文章目录1. 题目2. 解题1. 题目 现有一台饮水机&#xff0c;可以制备冷水、温水和热水。每秒钟&#xff0c;可以装满 2 杯 不同 类型的水或者 1 杯任意类型的水。 给你一个下标从 0 开始、长度为 3 的整数数组 amount &#xff0c;其中 amount[0]、amount[1] 和 amount[2] 分…

HDU-4089 Activation (概率DP求概率)

题目大意&#xff1a;一款新游戏注册账号时&#xff0c;有n个用户在排队。每处理一个用户的信息时&#xff0c;可能会出现下面四种情况&#xff1a; 1.处理失败&#xff0c;重新处理&#xff0c;处理信息仍然在队头&#xff0c;发生的概率为p1&#xff1b; 2.处理错误&#xff…