当前位置: 首页 > article >正文

Response.Cookies和Request.Cookies的Cookies

.NET中提供了读写Cookie的多种方法,Request.Cookies 是客户端通过 Cookie 标头形式由客户端传输到服务器的 Cookie;Response.Cookies 在服务器上创建并以 Set-Cookie 标头的形式传输到客户端。也就是说,一个是客户端向服务器端发送的来的,一个是服务器发送到客户端的。

         第一次创建Cookies的时候,下面的2种读取方法读取到的内容是一样:

C# 代码
HttpCookie hc = new HttpCookie("User2");
hc["UserName"] = "mengxianhui";
Response.Cookies.Add(hc);
   
Response.Cookies["User1"]["UserId"] = "net_lover";
   
Response.Write(Request.Cookies["User1"].Values["UserId"].ToString());
Response.Write(Request.Cookies["User2"].Values["UserName"].ToString());
Response.Write("<hr>");
Response.Write(Response.Cookies["User1"].Values["UserId"].ToString());
Response.Write(Response.Cookies["User2"].Values["UserName"].ToString());
但是,一旦Cookie存在,再使用上面的方法进行读取,结果是有差别的,Response.Cookies可以立即读取到新的Cookie,而Request.Cookies读取到仍是上一次设置的,也就是必须通过客户端向服务器发送请求时才能读取到。为什么会有这样的差别,应该是.NET实现的问题,里面有这么一段:
C# 代码
if (includeResponse && (this.Response != null))
{
    HttpCookieCollection cookies = this.Response.Cookies;
    if (cookies.Count > 0)
    {
        HttpCookie[] dest = new HttpCookie[cookies.Count];
        cookies.CopyTo(dest, 0);
        for (int i = 0; i < dest.Length; i++)
        {
            cookieCollection.AddCookie(dest[i], true);
        }
    }
}
在Cookie不存在时,它应该是读取Response.Cookies里面的Cookie了,所以第一次读取相同,而以后读取不同的原因吧。

另外,Response.Cookies必须是在设置完后读取,不能像Request.Cookies那样随时读取,如在别的页面读取Cookies,下面的方法就是错误的

C# 代码
protected void Page_Load(object sender, EventArgs e)
{
  Response.Write(Response.Cookies["User1"].Values["UserId"].ToString());
  Response.Write(Response.Cookies["User2"].Values["UserName"].ToString());
}

作者 孟宪会

转载于:https://www.cnblogs.com/pztx1992/archive/2012/08/14/2637878.html

http://www.lryc.cn/news/2416820.html

相关文章:

  • 2014 360校园招聘技术类笔试题
  • 【Ubuntu安装QQ】
  • MikroTik RouterOS 5.x使用HunterTik 2.3.1进行破解
  • Android学习路线指南
  • 软件开发中的热更新概述
  • Doctype是什么与浏览器模式详解(标准模式混杂模式)
  • window安全小知识1——autorun.inf相关知识
  • VC++编程技巧83例
  • 【操作系统】知识梳理(六)输入输出系统
  • printf大部分参数详解
  • symfony快速构建restfull api--api-platform初体验(快速上手笔记)
  • 清除电脑各种使用记录不留痕迹,保护你的隐私!
  • jquery插件treeTable
  • 在Node.js版本v12.16.2中,`crypto`模块提供了加密功能的实现接口
  • 免费获取天气预报代码
  • 叉乘证明贝祖定理_谈方琳定理
  • oracle中exist什么意思,oracle中not exists 是什么意思 , oracle数据库中exists的作用
  • Nagios 安装教程
  • HS6621低功耗调试(HS6621CG)
  • QQ如何设置使用代理服务器?
  • 提权进阶篇
  • [从零学习汇编语言] - 计算机中的硬件与软件
  • 【爬虫】批量下载B站收藏夹视频 - Python
  • 动态IP?静态IP?看完本文你就懂了
  • 系统提示uxtheme.dll文件缺少出现错误问题
  • xvid编解码器安装
  • Solidity随笔
  • Ant 命令详解
  • C语言入门代码库,模拟显示数字时钟
  • 要解决蓝牙连接故障,不可忽略蓝牙驱动程序