2009-08-14 112 views
2

有誰知道是否有可能將一個對象分配給JavaScript中的cookie?如果是的話,我們該怎麼做?我們可以在javascript中將對象分配到cookie中嗎?

+2

你應該編輯你的第一個問題:http://stackoverflow.com/questions/1275888/any-way-that-i-can-assign-window-openurl-into-cookies-array-in-javascript而不是開始一個新的。 – zombat 2009-08-14 05:58:11

回答

6

如果你可以序列化你的對象到其規範的字符串表示,並且可以反序列化它放回從所述串表示它的對象的形式,然後是你可以把它變成一個cookie。

從您的earlier question判斷將window.open()的結果存儲到cookie中,這不是您希望的答案。

+0

它會工作,如果我把它存儲到會話與JavaScript? – 2009-08-14 05:57:51

+0

我不認爲你可以存儲到JavaScript中的Session變量。 – rahul 2009-08-14 06:00:14

+1

@Jin:你不能將瀏覽器窗口序列化爲任何一種規範的字符串表示,以後可以反序列化,所以不能將它存儲在cookie中,也不能將它存儲在會話中,也不能將它傳遞給服務器端代碼進行存儲,等等。 – 2009-08-14 06:12:40

-2

我覺得只有4KB,所以你需要你的對象序列化到字符串不知何故被allowd到一個cookie

+2

這並沒有真正回答這個問題,它只描述了一個cookie的假設功能... – newfurniturey 2013-12-19 14:53:36

0

餅乾店隻字符串值。並且當您從Cookie中讀取它時將其反序列化。然而,只有當你的對象有一些簡單的數據(字符串,數字,數組)時,這纔可以工作,並且肯定不能用於函數。我也不確定你爲什麼想這樣做。

1

您將需要序列化您的對象,然後將其寫爲文本。我會考慮使用JSON,因爲它很好的支持。

有一個很好的解析器here。你只需要調用JSON.stringify()方法。要使用JavaScript編寫,你需要以正確的格式追加一個字符串

window.document.cookie 

餅乾該字符串應該是下面的格式

'name=cookiename; expires=Thu, 2 Aug 2001 20:47:11 UTC; path=/' 
0

餅乾被設計成只能容納文本,所以如果你需要將您的對象序列化爲一個簡單的字符串,以便此工作。

在大多數瀏覽器上,cookies僅限於+ - 4096字節,因此您無法存儲太多信息。

2

這是一個辦法做到這一點,

  1. 序列化你的對象變成JSON。
  2. Base64對JSON進行編碼。
  3. 使用Base64編碼的字符串作爲cookie值。

只是在讀取cookie時顛倒過程。

由於需要引用Base64字符集,因此您必須使用版本1 cookie。如果您想使用舊的Netscape樣式cookie,則需要使用URL安全的Base64編碼器。

當然,這隻適用於小物件。

相關問題