刚刚发现的一个问题,发现document.cookie无法获取到某些cookie。
主要原因是因为cookie的一个属性,httponly !,该cookie是从后端设置的,所以为了安全问题,设为了true,但也带来了一个问题,无法通过js脚本来获取该cookie,只能看得到,但是你获取不到。
目前可以通过将httponly 设为false来进行获取,可以通过在控制台将httponly单选框取消勾选尝试刷新页面。
setcookie 第七个属性就是设置 httponly 的,设置后无法通过 js 脚本获取。
但是虽然设置了httponly为true,网络请求还是可以正常携带发送的,因为这个属性本质上就是为了防止一些脚本和xss攻击的。
下面为cookie的七个属性:
Cookie名称(必填) | Cookie名称必须使用只能用在URL中的字符,一般用字母及数字,不能包含特殊字符,如有特殊字符想要转码。如js操作cookie的时候可以使用escape()对名称转码。 |
Cookie值(必填) | Cookie值同理Cookie的名称,可以进行转码和加密。 |
Expires(非必填) | 过期日期,一个GMT格式的时间,当过了这个日期之后,浏览器就会将这个Cookie删除掉,当不设置这个的时候,Cookie在浏览器关闭后消失。 |
Path(非必填) | 一个路径,在这个路径下面的页面才可以访问该Cookie,一般设为“/”,以表示同一个站点的所有页面都可以访问这个Cookie。 |
Domain(非必填) | 子域,指定在该子域下才可以访问Cookie,例如要让Cookie在a.test.com下可以访问,但在b.test.com下不能访问,则可将domain设置成a.test.com。 |
Secure(非必填) | 安全性,指定Cookie是否只能通过https协议访问,一般的Cookie使用HTTP协议既可访问,如果设置了Secure(没有值),则只有当使用https协议连接时cookie才可以被页面访问 |
HttpOnly(非必填) | 如果在Cookie中设置了"HttpOnly"属性,那么通过程序(JS脚本、Applet等)将无法读取到Cookie信息。 |