带Domain的Cookies,跳转页面后Domain丢失是怎么回事?

smallfools 2014-10-27 06:00:01
首先,在hosts文件中加入:
127.0.0.1 www.test.com

在页面a.aspx.cs中使用以下代码创建一个带domain的cookies

HttpCookie myCookie = new HttpCookie("myC", "kao");
myCookie.Domain = "www.test.com";
Response.Cookies.Add(myCookie);


然后使用以下代码在a.aspx中输出正常

for (int i = 0; i < Request.Cookies.Count; i++)
{
Label1.Text += "Domain:" + Request.Cookies[i].Domain + "<br />";
Label1.Text += "Name:" + Request.Cookies[i].Name + "<br />";
Label1.Text += "Value:" + Request.Cookies[i].Value + "<br /><br />";
}


输出内容为:
Domain:www.test.com
Name:myC
Value:kao

在a.aspx页面中有一个链接直接跳到b.aspx页面上。

<a href="b.aspx">跳到B</a>


同样在b.aspx页面上使用以下代码输出cookies

for (int i = 0; i < Request.Cookies.Count; i++)
{
Label1.Text += "Domain:" + Request.Cookies[i].Domain + "<br />";
Label1.Text += "Name:" + Request.Cookies[i].Name + "<br />";
Label1.Text += "Value:" + Request.Cookies[i].Value + "<br /><br />";
}


但在b.aspx页面上输出为:
Domain:
Name:myC
Value:kao
其中Domain的值www.test.com丢失。

请问这是怎么回事?
...全文
374 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
winnowc 2014-10-28
  • 打赏
  • 举报
回复
可以用浏览器内置的调试工具或者fiddler之类的看下浏览器发起的请求,向服务器传递的cookie只有名字和值,没有其它信息的。不是domain丢失,是本来就不会传递。 a页面能看到domain正是因为添加的那个新cookie,asp.net会把这次要设置的cookie也放到Request.Cookies里面去。
winnowc 2014-10-28
  • 打赏
  • 举报
回复
你看的是浏览器保存的cookie,这个当然有domain,但是它发送请求的时候不会带这个的。你看Network那一栏,实际发出请求的时候里面的cookie,才是服务端收到的。(请求的HTTP header里面的Cookie) cookie的domain不是用来向服务端传递的,而是服务端程序向浏览器设置后,浏览器记录下来(就是你上面看到的),它发起请求时会根据请求的地址来判断需不需要附带某个cookie,如果请求不属于某个cookie的domain,在请求的时候就不会带着这个cookie。所以服务端程序也不需要判断cookie的domain,因为收到的cookie都是属于请求的地址的所在的domain的。
smallfools 2014-10-28
  • 打赏
  • 举报
回复
引用 2 楼 github_22161131 的回复:
可以用浏览器内置的调试工具或者fiddler之类的看下浏览器发起的请求,向服务器传递的cookie只有名字和值,没有其它信息的。不是domain丢失,是本来就不会传递。

a页面能看到domain正是因为添加的那个新cookie,asp.net会把这次要设置的cookie也放到Request.Cookies里面去。


我用chrome浏览器追踪了一下cookies,在A页面中可以看到cookies有domain


跳转到B页面之后,还是可以看得到cookies,可是为什么会取不到它的值呢?
smallfools 2014-10-28
  • 打赏
  • 举报
回复
引用 2 楼 github_22161131 的回复:
可以用浏览器内置的调试工具或者fiddler之类的看下浏览器发起的请求,向服务器传递的cookie只有名字和值,没有其它信息的。不是domain丢失,是本来就不会传递。 a页面能看到domain正是因为添加的那个新cookie,asp.net会把这次要设置的cookie也放到Request.Cookies里面去。
那就是说,无解? 那cookies还需要domain有什么用啊?反正不会传递。
smallfools 2014-10-28
  • 打赏
  • 举报
回复
引用 1 楼 Mockqi 的回复:
http://www.cnblogs.com/fsjohnhuang/archive/2011/11/22/2258999.html
这个并没有对我的问题有任何帮助啊
smallfools 2014-10-28
  • 打赏
  • 举报
回复
明白了,结贴

62,074

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧