.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());
}

Request.Cookies 和 Response.Cookies 的区别的更多相关文章

  1. C#中Request.Cookies 和 Response.Cookies 的区别分析

    .NET中提供了读写Cookie的多种方法,Request.Cookies 是客户端通过 Cookie 标头形式由客户端传输到服务器的 Cookie:Response.Cookies 在服务器上创建并 ...

  2. Request.Cookies和Response.Cookies

    Request.Cookies创建的Cookie只能用于后台不能用于HTML的前台Response.Cookies操作过的Cookie,所有方法获取到的都是被更新过的值,也就是说Response.Co ...

  3. request.setCharacterEncoding()、response.setCharacterEncoding()的区别

    request.setCharacterEncoding()是你设置获得数据的编码方式.response.setCharacterEncoding()是你响应时设置的编码.response.setCo ...

  4. Response.cookies和Request.cookies

    Response.cookies和Request.cookies的区别很重要,由于方法基本都是差不多的,特别对于初学者而言,很容易出现混淆. 简单说就是创建cookie用response,获取cook ...

  5. Response.Cookies 和 Request.Cookies

    Response.Cookies 和 Request.Cookies     原文地址: http://www.cnblogs.com/forcertain/archive/2012/12/04/28 ...

  6. ASP.NET之Cookie(坑爹的Response.Cookies.Remove)(转)

      在web开发中Cookie是必不可少的 .NET自然也有一个强大的Cookie操作类,我们用起来也非常方便,不过在使用中我们会发现一个坑爹的事情Response.Cookies.Remove删除不 ...

  7. ASP.NET之Cookie(坑爹的Response.Cookies.Remove)

    原文:ASP.NET之Cookie(坑爹的Response.Cookies.Remove) 在web开发中Cookie是必不可少的 .NET自然也有一个强大的Cookie操作类,我们用起来也非常方便, ...

  8. python web开发-flask中response,cookies,session对象使用详解

    Response响应对象: 当一个web请求被服务器处理完后,会返回用户请求的响应,这时候就要用到响应对象,根据响应给用户的形式不同,响应对象有以下几种处理方式 如果返回的是一个合法的响应对象,它会从 ...

  9. Asp.Net中Response.Cookies.Remove 无法删除COOKIE的问题解决方法

    登陆功能经常需要使用Cookie来存储登陆信息,可是在开发过程中,经常发现cookie无法删除的问题.删除的代码无非就是找到Cookie并删除掉. 但是会发现 Response.Cookies.Rem ...

随机推荐

  1. jmeter实战1

  2. From today 2019.02.27

    HIT开设软件构造课程,需要在博客上分享记录学习体验,感觉还是挺好的. 以后会不定期更新一些关于学下java的笔记和实验相关的内容.

  3. 关于使用AzureCli登陆提示SSLError的错误解决方案

    如果使用Powershell的azure cli命令登陆Azure时提示sslerror,大致如下的错误: 这个是由于你的网络前有网关造成的ssl验证没法通过. 解决方案: 在powershell中执 ...

  4. 机器学习初入门03 - Matplotlib

    这一部分很简单,所以以代码的形式给出,在实际学习开发中,Matplotlib最好只把它当成一个画图的工具来用,没有必要深究其实现原理是什么. 一.折线图的绘制 import pandas as pd ...

  5. PAT甲级题解-1097. Deduplication on a Linked List (25)-链表的删除操作

    给定一个链表,你需要删除那些绝对值相同的节点,对于每个绝对值K,仅保留第一个出现的节点.删除的节点会保留在另一条链表上.简单来说就是去重,去掉绝对值相同的那些.先输出删除后的链表,再输出删除了的链表. ...

  6. 【Alpha】第六次Scrum meeting

    今日任务一览: 姓名 今日完成任务 所耗时间 刘乾 今日完成了python的一个template引擎airspeed的使用,并使用该引擎成功跑出一份latex模板替换文件. Issue链接:https ...

  7. 单片机内程序运行的时候ram空间是如何分配的?

    转自:http://blog.sina.com.cn/s/blog_a575eb9401014tam.html 单片机内程序运行的时候ram空间是如何分配的?我现对一个程序进行减少片内ram的使用的优 ...

  8. thinkphp5报错

    thinkPHP5配置nginx环境无法打开(require():open_basedirrestrictionineffect.File(/mnt/hgfs/ro (2018-07-19 22:05 ...

  9. msyql: navicat 连接时msyql遇到的问题

    1.使用 mysql的用户,密码连接 服务器上的MySQL时,连接不上,报 100xx的错误. 1)原因是,MySQL默认情况下,只允许本地连接[127.0.0.1,或localhost]来连接mys ...

  10. 转帖:Android 官方推荐 : DialogFragment 创建对话框

    转: Android 官方推荐 : DialogFragment 创建对话框 复制内容,留作备份 1. 概述 DialogFragment在android 3.0时被引入.是一种特殊的Fragment ...