§ ITPOW >> 文档 >> C#

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

作者:vkvi 来源:ITPOW(原创) 日期: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 的。


相关文章