如何使用Javascript将cookie存储在本地存储中?

时间:2012-05-25 01:10:35

标签: javascript cookies local-storage

我有一个基于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);
}

3 个答案:

答案 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());
    }
}