认认真真写点 Cookie-深究 Port、Path

作者:vkvi 来源:千一网络(原创) 日期:2016-11-28

ASP.NET 里面 Cookie 不分端口

System.Net.Cookie 个属性是端口,但是 System.Web.HttpCookie这个端口属性的,也就是说它不区分端口,也就是说在 ASP.NET 里面,两个应用程序如果域名相同,端口不同,不过路径又没限制,那么这两个应用程序之间是可以相互读取 Cookie 的,这个已经测试。

嗯,更准确的说是网页中 Cookie 是不区分端口的,而不仅限于 ASP.NET。

Cookie 的 Path 值为:未指定、“/”、“”

如上,c1 和 c2 是一样的,也就是说将二者都输出到客户端,由于名称、路径相同,后输出的会覆盖先输出的,也就是说未指定 Path 与“/”是等效的

但是 c3 却是与前面二者不相同,尽管名称相同,c3 不会与 c1、c2 冲突,如果将上述代码的 Cookie 都输出到客户端,会存在两个 Cookie。

不过,c1、c2、c3 被读取的权限都是一样的,也就是说能读取 c1、c2 的,一定能读取 c3,反过来也是一样的。

类似:/path 与 /path/ 也是一样道理。

还有:凡是没有以“/”开头的 Path,都相当于指定“”(被读取权限也一样),如果这样两个 Cookie 名称相同,则后输出的覆盖先输出的。

Path 大小写敏感吗?

敏感。

Path 可以包含文件名吗?

可以。

上级 Path 中的文件能读取下级 Path 的 Cookie 吗?

不能。反过来可以。

上级 Path 的 Cookie 能覆盖下级 Path 的同名 Cookie 吗?

不能。反过来也不能。

子目录的文件可以指定其 Cookie 的 path 为上级目录吗?

可以。写入 Cookie 不会去校验,也就是说不会因为是子目录写 Cookie,就禁止其设置 Path 为“/”。兄弟目录之间也是可以互写的。

退一步说,即使不允许向别人的目录写 Cookie,那也只是 Web 平台限制,我换个平台不就行了,比如 .NET 限制了,PHP 说不定没限制啊。

这点非常重要,我们部署时要保证同一个域名(或 IP)中的应用程序应该是相互可信的,否则应用程序 A 就可以破坏或者盗取应用程序 B 的 Cookie。

为什么 Request.Cookie[i].Path 的值总是为“/”

我也不知道。纵然写的时候是写了 Path 的。


你前面那位网友看了:WordPress 2.5.1 发布

▲▲▲嘿,欢迎转载传播本站原创文章,尽量保留来源噢。▲▲▲

文章评论
标题:必填
内容:
本站永远终止与捏造“罪名”不支付广告费的某度联盟合作。
vkvi
vkvi

作者简介: vkvi,致力于 .NET Web 开发、移动开发的技术推广,在 .NET、SQL Server、Windows Server 等方面有深入研究和丰富经验,10 年间共计撰写文章 4000 余篇。 主持金融、国土、农业、电商等多个行业项目执行, 推行“技术提升生产力、人心决定成功率”的管理理论。 联系他