.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,基本上没什么用处。

 

最新文章

  1. 在win7环境下批量修改文件权限
  2. Windows Store App 全球化 设置指定页面的语言
  3. Java,Android 项目导入Eclipse常见错误
  4. jsp取得绝对路径的方法(避免请求转发的方式导致路径错误)
  5. FTP+SFTP工具类封装-springmore让开发更简单
  6. wc2016总结
  7. POJ 2777 Count Color(线段树染色,二进制优化)
  8. hdu 4411 最小费用流
  9. [Codeforces673A]Bear and Game(水题,思路)
  10. ASP.NET文件上传
  11. 【译】typeof null的前世今生
  12. VBS解析时候遇到时间
  13. PTA題目的處理(三)
  14. CollectionUtils工具类的常用方法
  15. 查询结果集转换成HTML存储过程
  16. TestNG+Java+Selenium+Maven 代码实例
  17. Cpython支持的进程与线程
  18. yii2 数据提供者 dataProvider
  19. Linux 防火墙和SELinux的开启和关闭
  20. Spring相关知识点

热门文章

  1. 50个Android开发技巧(12 为控件加入圆角边框)
  2. ES shard unassigned的解决方法汇总
  3. correct ways to define variables in python
  4. Windows下安装和使用MongoDB
  5. sql server 去掉某字段左边的0
  6. AOJ GRL_1_A: Single Source Shortest Path (Dijktra算法求单源最短路径,邻接表)
  7. 51nod 1268 和为K的组合 dfs
  8. 51nod1073-约瑟夫环,递归。
  9. swift语言点评十-Value and Reference Types
  10. [Python随笔]&gt;&gt;字符串大小写是如何转换的?