zoukankan      html  css  js  c++  java
  • 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());
    }

  • 相关阅读:
    HDU 3949 XOR
    [JXOI2018]游戏
    树状数组 Binary Indexed Tree/Fenwick Tree
    Java 多线程编程
    概率算法
    最长回文子串 Manacher算法
    动态规划-最长上升子序列 LIS
    流水作业调度
    多机调度问题
    A*搜索算法
  • 原文地址:https://www.cnblogs.com/ranran/p/4123123.html
Copyright © 2011-2022 走看看