zoukankan      html  css  js  c++  java
  • C#中Request.Cookies 和 Response.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());
    }

    总结:

    Request.Cookies:主要是用于获取所有Cookie值的,包括JS、Request.Cookies和Response??.Cookies三种方法创建的Cookie值;说到这里,大家可以看出Request.Cookies既可以获取Cookie也可以创建Cookie,那么它创建的Cookie与Response和JS创建的Cookie有什么不用呢,通过实验发现,通过Request.Cookies创建的Cookie只有?Request.Cookies才能获取到,而其他两种方法是不能获取的,也就是说Request.Cookies创建的Cookie只能用于.Net后台不能用于HTML的前台。

    Response.Cookies:主要用于Cookie的创建、赋值和删除操作,经过?Response.Cookies操作过的Cookie,所有方法获取到的都是被更新过的值,也就是说Response.Cookies是修改所有容器中的Cookie的值;Response.Cookies除了是Cookie的终极修改者外,我们在写代码的时候可能会发现通过Response.Cookies也可以得到部分Cookie的值,通过实验发现,此处获取的Cookie值只是本次会话中且是通过Response.Cookies创建的Cookie,基本上没什么用处。

     
  • 相关阅读:
    day7 面向对象 静态方法 类方法 属性方法 类的特殊成员方法 元类 反射 异常处理
    day6 面向对象 封装 继承 多态 类与实例在内存中的关系 经典类和新式类
    day5 time datetime random os sys shutil json pickle shelve xml configparser hashlib subprocess logging re正则 python计算器
    kafka常用操作命令
    linux基础
    django学习1——初识web应用程序
    mysql数据库(三)——pymysql模块
    mysql数据库(二)——表的查询
    mysql数据库(一)
    Python常用模块——re模块
  • 原文地址:https://www.cnblogs.com/yachao1120/p/6559050.html
Copyright © 2011-2022 走看看