2017-09-03 73 views
0

我使用的是哈皮框架的Node.js应用程式,以及哈皮框架本身自带的Cookie管理工具,我使用的身份验证这。JavaScript的重复饼干

框架,然后设置了一个名为会话cookie,以编码为base64一个JSON值。该域设置为example.com(未example.com)的情况

现在,当我尝试编辑这个cookie的客户端,通过执行以下操作

document.cookie = 'session=' + btoa(JSON.stringify(_decoded)) + "; path=/; domain=example.com"; 

这实际上设置了问题之所在复制的cookie域“.example.com的”

问我有没有Javascript来预先考虑点,我似乎无法摆脱它。

我猜想,这是因为这点,该cookie被复制。我如何设置没有它的域自动添加一个点?

编辑

我已经放弃试图删除前面的点,而是在尝试删除旧Cookie,然后创建一个新的。但我仍然以重复的饼干结束!

  1. 导航到/登录并输入登录信息
  2. 重定向到/账号和饼干由服务器设置(不带前导点)
  3. 执行JavaScript删除并重新创建的cookie
  4. 1饼干现在存在它有一个域

上述行为是好的前前导点,但是下面也发生了,这是坏

  1. 导航到/登录并输入登录信息
  2. 重定向到/账号和饼干由服务器设置(不带前导点)
  3. 导航到/例如
  4. 执行JavaScript删除并重新创建的cookie
  5. 2饼干现在存在,一个与领先的点(由JS创建),一个没有(由服务器创建)

我正在使用的代码是

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

是由一些偶然原来的cookie已经存在于这个? document.cookie

文件:从

btoa(JSON.stringify(_decoded)) 

原因。cookie被定义为:

,包含所有cookie

所以在我看来,要添加一个新的分号分隔值(新的cookie)到该列表中的分号分隔的列表(字符串而不删除原有的cookie)

好吧,这并不是说,你尝试过吗?

link

听起来像你描述

+0

原来的Cookie是“会话= eyJpZCI6IjVhYWZhYjE2MDRiYTVjZmQ3NmIyNDhmZDM3ODNiNmE1In0 =”,在_decoded变量从以base64解码成JSON对象,然后添加一个属性,它 – Michael

+0

@迈克尔衍生 - 见编辑,听起来好像东西正在打扰你 – DanteTheSmith

+0

谢谢你,我稍微您的链接混淆。它我的问题 - 一个字一个字 - 在其他网站上,答案似乎不相关? – Michael