2012-05-25 174 views
3

我有一個基於Java腳本的Android應用程序(希望後來iPhone),並使用Phonegap/Applaud製作成應用程序。如何使用Javascript將本地存儲的Cookie存儲?

不幸的是,設置和獲取Cookie在Android上不起作用,這可能是Android環境特有的。我被告知使用「本地存儲」可能更可靠。

但是,直到今天早上,我對本地存儲一無所知,所以我正在努力獲得水分。從我所收集的內容來看,它基本上是另一種用不同語法保存數據的地方。對於我的情況,除了Android迫使我使用它之外,我認爲它不會給我帶來任何好處。因此,我希望我仍然可以利用現有的代碼來設置和獲取Cookie,而不必採用全新的方法。

當然,我可以在我的Javascript中做一個測試,看看是否有本地存儲,如果有,在那裏存儲和檢索我的cookie數據,如果沒有,那麼就像正常使用cookie一樣?

注1:我搜索堆棧溢出類似的問題,並有this one which at first seems exactly what I'm talking about,但它太簡潔,所以我不能分析它知道我應該用它做什麼。此外,我認爲它假設我認爲我沒有庫和代碼的存在。我也看着this question,但我認爲這跟我之後的事情相反。

注2:這是我目前的獲取和設置Cookie代碼(從某處採購網絡上直到Android的問題,是堅如磐石的可靠性。):

function getCookie(c_name) 
{ 
    var c_start = document.cookie.indexOf(c_name + "="); 

    if (document.cookie.length > 0) 
    { 
     if (c_start !== -1) 
     { 
      return getCookieSubstring(c_start, c_name); 
     } 
    } 
    return ""; 
} 

function setCookie(c_name, value, expiredays) 
{ 
     var exdate = new Date(); 
     exdate.setDate(exdate.getDate() + expiredays); 
     document.cookie = c_name + "=" + escape(value) + 
     ((expiredays === null) ? "" : ";expires=" + exdate.toUTCString()); 
     alert("this is document.cookie: " + document.cookie); 
} 

回答

4

看一看http://diveintohtml5.info/storage.html。歷史可能並不是很有意思,但它至少爲further-reading section中的其他教程提供了一個很好的鏈接列表。

所以,現在到你的代碼。首先要提的是,localStorage沒有過期 - 它是持久的(直到用戶手動清除所有內容)。如果您想使用一些較短的存儲空間,也可以使用sessionStorage,它具有相同的界面,但只有在瀏覽器關閉之前才能使用。

改寫你的代碼很簡單:

function getCookie(c_name) { 
    return localStorage.getItem(c_name); 
} 

function setCookie(c_name, value, expiredays) { 
    return localStorage.setItem(c_name, value); 
} 
2

localStorage的行爲完全像一個普通的對象。

localStorage.somekey = "My data"; // set 
alert(localStorage.somekey); // get 
delete localStorage.somekey; // unset 

localStorage和任何其他對象之間唯一的區別是,它是pesistent。任何來自同一來源的頁面都可以訪問對象中的值,並且如果瀏覽器關閉,它們甚至可以存活。

它們在數據存儲的各個方面都優於餅乾,因爲它們不會每次發送到服務器(儘管這並不是說餅乾無用 - 兩者都有其優勢)。

這真的很簡單;)

+0

最近規格有變化還是localStorage仍然只有'string'? –

+1

它只是字符串,但餅乾也是如此,所以它在這個特定的上下文中並不重要。你可以串行化對象,所以它不像是字符串只是一個限制(儘管自動序列化會很好) –

+0

本地存儲是否在所有瀏覽器上都使用? – Questioner

1

我以前在其他答案的信息,所以這不是一個不同的答案,但我認爲這將是幫助他人看到完整的代碼我結束了。這可以作爲使用cookie的替代品而大大減少(正如我所做的那樣)。它測試本地存儲,並使用它(如果存在),如果不存在則使用cookie。

請注意,您可能需要在執行警報時取出警報。

function getCookie(c_name) 
{ 
    if(typeof localStorage != "undefined") 
    { 
     return localStorage.getItem(c_name); 
    } 
    else 
    { 
     var c_start = document.cookie.indexOf(c_name + "="); 
     if (document.cookie.length > 0) 
     { 
      if (c_start !== -1) 
      { 
       return getCookieSubstring(c_start, c_name); 
      } 
     } 
     return ""; 
    } 
} 

function setCookie(c_name, value, expiredays) 
{ 
    var exdate = new Date(); 
    exdate.setDate(exdate.getDate() + expiredays); 
    if(typeof localStorage != "undefined") 
    { 
     alert("This place has local storage!"); 
     localStorage.setItem(c_name, value); 
    } 
    else 
    { 
     alert("No local storage here"); 
     document.cookie = c_name + "=" + escape(value) + 
     ((expiredays === null) ? "" : ";expires=" + exdate.toUTCString()); 
    } 
}