2017-09-03 119 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