我有一个基于Javacript的Android应用程序(希望后来的iPhone),并使用Phonegap / Applaud制作应用程序。
不幸的是,设置和获取Cookie不适用于Android,这可能是Android环境特有的。我被告知使用“本地存储”可能更可靠。
然而,直到今天早上我对本地存储一无所知,因此我很难获得娇小。从我收集的内容来看,它基本上只是另一个用不同语法保存数据的地方。对于我的情况,除了Android迫使我使用它之外,我认为它不会比cookie有任何优势。因此,我希望我仍然可以利用我现有的代码来设置和获取cookie,而不必采用全新的方法。
当然我可以在我的Javascript中进行测试,看看是否有本地存储,如果存在,那么在那里存储和检索我的cookie数据,如果没有,那么只是正常使用cookie?
注1: 我在Stack Overflow中搜索了类似的问题,并且有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);
}
答案 0 :(得分:5)
看看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);
}
答案 1 :(得分:2)
localStorage
的行为与常规对象完全相同。
localStorage.somekey = "My data"; // set
alert(localStorage.somekey); // get
delete localStorage.somekey; // unset
localStorage
与任何其他对象之间唯一真正的区别在于它是不合适的。来自同一来源的任何页面都可以访问对象中的值,如果浏览器关闭,它们甚至可以存在。
它们在数据存储的各个方面都优于cookie,因为它们不会在每次请求时被发送到服务器(虽然这并不是说cookie没用 - 两者都有它们的优点)。
这很简单;)
答案 2 :(得分:2)
我在其他答案中使用了这些信息,所以这不是一个不同的答案,但我只是认为看到我最终得到的完整代码对其他人有帮助。这可以作为使用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());
}
}