用于设置某个Cookie允许访问的目录,例如你只想让此Cookie让网站下某个指定目录下代码页面进行访问,就可以设置该属性。默认的情况下也就是没有指定此属性时,设置的Cookie在对应的站点中所有页面均可访问。
这里还有一个细节需要注意,如果设置指定目录才能访问,那么浏览器在发送请求时除了指定目录会发送cookie,其他的页面浏览器不会发送cookie请求报文头中也不会存在cookie的数据。
实操验证:
示例说明:
通过请求Test.ahsx页面创建一个cookie并设置了指定允许访问的目录A,页面请求后浏览器接收到服务器返回的cookie在响应报文头中,接下来分别请求A目录和B目录的两个页面,由于cookie只允许A目录的页面才能访问,所以在请求A.ahsx页面时成功的输出了cookie中的数据,并观察到只有在请求A目录的页面时浏览器的请求报文中才会有cookie数据。
另外,通过设置该属性可以缩小访问的范围从而提高一定的安全性。
3.4.Domain属性
指定了可以访问该Cookie的域名,默认值是当前站点所在服务器的域。
简单来说cookie的访问不能跨域例如,站点创建的cookie在站点中是不能访问的。
但是不能跨域不代表不能跨服务器或站点,因为域名可以指向多台服务器或多个不同的网站系统,因为cookie机制并未严格遵守同源策略,例如:801站点创建的cookie可以在:802站点中进行读取,然而此特性对于实现单点登录非常有用。
下图示例两个不同的站点共享cookie数据,因为两个站点都在同域下。
另外这里还补充一点:
上述说cookie不能跨域名访问,并且不能跨浏览器访问不同浏览器设置的cookie都是不相关的,例如你在谷歌浏览器在博客园上进行了登录,博客园使用cookie记录你的用户名,然后你在IE浏览器访问博客园此时IE不能获取你在谷歌浏览记住的用户名,需要重新输入。
3.4.Secure属性
指定是否使用HTTTPS安全协议发送Cookie。使用HTTP安全协议,可以保护Cookie在浏览器和Web服务器之间传输过程中不被窃取和篡改。个人觉得Domain属性的特性在一定范围上拓展了Cookie的使用范围但是会造成一定的安全隐患,最简单的方式就是将站点部署为HTTPS的站点并为Cookie设置该属性。
3.5HTTPOnly属性
用于防止客户端通过JS脚本document.cookie属性访问cookie,有助于保护Cookie不被跨站脚本攻击窃取或篡改。但是,HTTPOnly的应用仍存在局限性,一些浏览器可以被阻止使JS读取cookie,但允许写的操作;此外大多数浏览器仍允许通过XMLHTTP对象读取HTTP响应中的Set-Cookie头从而获取cookie数据,个人觉得该属性的存在没有太大的实际意义。
4.在ASP.NET中使用Cookie
使用Cookie很简单,也根本不用记住,还是秉承着“要什么点什么”的原则就行,如:Request.Cookies。
下面还是官方的写下代码:
1 HttpCookie cookieUid = Request.Cookies["uid"]; 2 3 if (cookieUid==null) //第一次访问,则创建 4 { 5 cookieUid = new HttpCookie("uid", Request["uid"]); 6 cookieUid.Expires = DateTime.Now.AddDays(1); 7 } 8 else // 非第一次,则直接读取 9 { 10 string uid = cookieUid.Value; 11 Response.Write("当前登录用户名:"+uid); 12 }