栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C# > C#教程

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

C#教程 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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("


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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/125865.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号