缘起
如何在不发起一个Http请求的情况下删除一个Httponly的cookie?
探索:
1. 虽然JS无法读取Httponly的cookie,那么JS是否可以设置或删除Httponly的cookie呢?
答案是否定的
2. 使用http-equiv类型的meta标签是可以设置cookie的,那么是否可以cache一个带有http-equiv类型的meta标签的页面来操作cookie呢?
http-equiv类型的meta标签只能设置、删除、修改非Httponly类型的cookie
分析:
分析1:
JS无法访问Httponly的cookie,其中包括三层含义:
- 无法读取
- 无法设置和修改
- 无法删除
如:
无法通过如下方式设置、修改或删除一个已存在的Httponly的cookie:
1 |
document.cookie = "test=set_by_js; expires=Thu, 01-Jan-2070 00:00:01 GMT; path=/" |
无法通过如下方式设置、修改或删除一个已存在的Httponly的cookie:
1 |
document.cookie = "test=set_by_js; expires=Thu, 01-Jan-2070 00:00:01 GMT; path=/; Httponly" |
注意:或许你通过第一种方式在一个Httponly的cookie已存在的情况下设置了一个新的test cookie,那么基本上是因为两个test的domain或path不同;如:一个Httponly的cookie设置在a.test.com域下,而这时通过document.domain=”test.com”,将domain修改为了 test.com;这时候可以通过第一种方式设置一个testcookie,和原有的Httponly的cookie并不冲突
分析2:
HTML中有一个meta标签,其中的一个用法是http-equiv,如,可以通过如下方式设置cookie:
1 |
<meta http-equiv="Set-Cookie" content="cookiename=cookievalue; expires=Friday, 12-Jan-2021 18:18:18 GMT; path=/"> |
但是,测试发现,似乎无法通过JS创建meta标签的方式来设置cookie
分析3:
测试发现,无法通过meta标签来设置、修改、删除一个Httponly的cookie