我将Hapi框架用于Node.js应用程序,而Hapi框架附带了自己的Cookie管理工具,我将其用于身份验证。
然后框架设置一个名为session的cookie,其json值编码为base64。域名设置为example.com(不是.example.com)
现在,问题在于当我尝试编辑此cookie客户端时,通过执行以下操作
document.cookie = 'session=' + btoa(JSON.stringify(_decoded)) + "; path=/; domain=example.com";
这实际上是使用域' .example.com'
设置了一个重复的Cookie我还没有要求Javascript添加点,我似乎无法摆脱它。
我假设是因为这个点,所以cookie被复制了。如何在没有自动添加点的情况下设置域?
修改
我已经放弃尝试删除前导点,而是尝试删除旧cookie,然后创建一个新cookie。但是我最终还是会有重复的Cookie!
上述行为很好,但是也会发生以下情况,这是不好的
我使用的代码是
API.Session = {
Encoded : function () { return document.cookie.replace(/(?:(?:^|.*;\s*)session\s*\=\s*([^;]*).*$)|^.*$/, "$1")},
Decoded : function () { return JSON.parse(atob(this.Encoded()))},
Update : function (_decoded) {
document.cookie = 'session=; expires=Thu, 01 Jan 1970 00:00:01 GMT;';
document.cookie = 'session=' + btoa(JSON.stringify(_decoded)) + "; path=/; domain=example.com;";
}
}
API.Helpers.ShowAdvancedOptions = function () {
var s = API.Session.Decoded()
s.ShowAdvancedOptions = true
API.Session.Update(s)
}
答案 0 :(得分:0)
原来的cookie是否已经存在于此?
btoa(JSON.stringify(_decoded))
原因来自: document.cookie
document.cookie定义为:
包含所有Cookie的以分号分隔的列表的字符串
所以在我看来,你正在为该列表添加一个新的分号分隔值(新cookie)(不删除原始cookie)
好吧,不是吗,你试过这个吗?
听起来与您描述的问题相同
答案 1 :(得分:0)
对于有类似问题的任何人,最终通过完全删除域属性来解决这个问题。见other related question