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

最新文章

  1. Qt控件样式 Style Sheet Demo
  2. SQL Server 数据库查找重复记录的几种方法
  3. hdu---(3555)Bomb(数位dp(入门))
  4. html学习的一些问题
  5. JBoss EAP6/AS7/WildFly: How to Use Properties Files Outside Your Archive--reference
  6. xss框架基础框架实现
  7. 团队作业7——第二次项目冲刺(Beta版本12.10)
  8. (英文版)VScode一键生成.vue模板
  9. check约束
  10. Bash 脚本 去除注释
  11. SQL Server 2012安装时报错,错误 0x80070422怎么解决?解决方法。
  12. 【转】Spring MVC处理静态资源
  13. MySQL触发器的正确使用与案例分析
  14. schema in oracle
  15. ipython的使用
  16. linux通过命令查找大文件
  17. 【uoj#225】[UR #15]奥林匹克五子棋 构造
  18. 20179223《Linux内核原理与分析》第八周学习笔记
  19. C# 中的&quot;yield&quot;与 &quot;yield break&quot;使用
  20. Jmeter函数引用和函数重定向【转】

热门文章

  1. yocto-sumo源码解析(二): oe-buildenv-internal
  2. 华为笔试——C++字符串四则运算的实现
  3. one team
  4. Linux 第六周实验
  5. 第二个Sprint冲刺第六天
  6. MongoDB ,cursor not found异常
  7. Python爬虫:如何爬取分页数据?
  8. RANCHER2.0 的简单使用
  9. Exchange2010批量删除邮件
  10. eclipse运行tomcat中发生异常重启后tomcat端口被占用