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

How can I store a cookie in local storage with Javascript?

本文关键字:存储 cookie 何使用 Javascript      更新时间:2023-09-26

我有一个基于Javacript的Android应用程序(希望是后来的iPhone),并使用Phonegap/Applaud制作成应用程序。

不幸的是,设置和获取cookie在Android上不起作用,这可能是Android环境所特有的。有人建议我使用"本地存储"可能更可靠。

然而,直到今天早上,我对本地存储一无所知,所以我正在努力获得水。从我收集的信息来看,它基本上只是另一个使用不同语法保存数据的地方。就我的情况而言,我认为它没有给我带来任何优于cookie的优势,除了Android迫使我使用它的事实。因此,我希望我仍然可以利用我现有的代码来设置和获取cookie,而不必采用全新的方法。

当然,我可以在我的 Javascript 中进行测试以查看是否存在本地存储,如果有,请在那里存储和检索我的 cookie 数据,如果没有,那么像往常一样使用 cookie?

注意1: 我在Stack Overflow中搜索了类似的问题,有一个乍一看似乎正是我在说的,但它太简洁了,所以我无法解析它来知道我应该如何处理它。此外,我认为它假设存在我认为我没有的库和代码。我也看过这个问题,但我认为它与我所追求的相反。

注意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);
}

看看 http://diveintohtml5.info/storage.html。历史可能根本不有趣,但它至少提供了一个很好的链接列表,指向进一步阅读部分中的其他教程。

所以,现在进入你的代码。首先要提到的是localStorage没有过期 - 它是持久的(直到用户手动清理所有内容)。如果您想使用一些较短的存储空间,您也可以使用 sessionStorage ,它具有相同的界面,但只持续到浏览器关闭。

改写代码很简单:

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

localStorage的行为与常规对象完全相同。

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

localStorage和任何其他对象之间唯一真正的区别是它是pesistic。来自同一来源的任何页面都可以访问对象中的值,如果浏览器关闭,它们甚至可以存活。

它们在数据存储方面的各个方面都优于 cookie,因为它们不会在每次请求时都发送到服务器(尽管这并不是说 cookie 毫无用处 - 两者都有其优势)。

这真的很简单;)

我使用了其他答案中的信息,所以这不是一个不同的答案,但我只是认为看到我最终得到的完整代码对其他人会有所帮助。这几乎可以作为使用 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());
    }
}