我正在处理第三方JavaScript代码,该代码通过document.cookie=
设置Cookie但不使用key=value
格式;而不是document.cookie="mykey=myvalue"
它document.cookie="10254/1/19,20,/0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,//20"
。
这导致我的服务器端代码出现问题,因为Chrome和Firefox将此作为cookie发送到我的服务器,没有名称和价值" 10254/1 / 19,20,/ 0,1,2,3 ,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,// 20&#34 ;. Safari发送一系列没有值的cookie,名称为" 10254/1 // 0,// - 1"," 10254/1 // 0,1,// - 1" ," 10254/1 // 0,1,2,// - 1"等
设置不带格式为key=value
的Cookie是否合法?我已阅读http://tools.ietf.org/html/rfc6265#section-4.1.1并看到cookie-pair = cookie-name "=" cookie-value
,但我不清楚=
是否必须。我想是的,只是想确认一下。
答案 0 :(得分:0)
回答自己:用户代理应忽略没有=
的cookie。来自http://trac.tools.ietf.org/wg/httpstate/trac/ticket/1
根据邮件列表和IETF77的讨论,我已从草稿中删除了无名cookie。没有名字的Cookie(因为它们缺少" ="或者因为" ="作为set-cookie-string"的第一个字符出现)现在被忽略用户代理。
但实际上,浏览器会发送name-value-pair
不包含=
的Cookie。但它们没有相同的行为:例如,如果我使用document.cookie("foo")
设置cookie,Safari将向服务器发送一个名为" foo"的cookie。还有一个空白值,而Chrome会发送一个空白名称的Cookie,其价值为" foo"。