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

如何使用Javascript在本地存储中存储cookie?,javascript,cookies,local-storage,Javascript,Cookies,Local Storage,我有一个基于Javascript的Android应用程序(希望是更晚的iPhone),它使用Phonegap/Claud制作成一个应用程序 不幸的是,设置和获取cookie在Android上不起作用,这可能是Android环境特有的。有人建议我使用“本地存储”可能更可靠 然而,直到今天早上我才知道本地存储,所以我很难获得aquainted。据我所知,它基本上只是另一个用不同语法保存数据的地方。就我的情况而言,我不认为它比cookies有任何优势,除了安卓强迫我使用它。因此,我希望我仍然可以利用我

我有一个基于Javascript的Android应用程序(希望是更晚的iPhone),它使用Phonegap/Claud制作成一个应用程序

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

然而,直到今天早上我才知道本地存储,所以我很难获得aquainted。据我所知,它基本上只是另一个用不同语法保存数据的地方。就我的情况而言,我不认为它比cookies有任何优势,除了安卓强迫我使用它。因此,我希望我仍然可以利用我现有的代码来设置和获取cookie,而不必采用全新的方法

当然,我可以在Javascript中做一个测试,看看是否有本地存储,如果有,在那里存储和检索我的cookie数据,如果没有,就正常使用cookie

注1:我在Stack Overflow中搜索了类似的问题,确实有,但它太简洁了,所以我无法解析它,无法知道应该如何处理它。此外,我认为它假定存在我认为没有的库和代码。我也看了,但我认为这和我想要的正好相反

注2:这是我当前获取和设置cookie的代码(从web上的某个地方获取。在Android出现问题之前,它是非常可靠的):


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

localStorage.somekey = "My data"; // set
alert(localStorage.somekey); // get
delete localStorage.somekey; // unset
localStorage
与任何其他对象之间唯一的真正区别在于它是pesistent。来自同一来源的任何页面都可以访问对象中的值,如果浏览器关闭,这些值甚至可以继续存在

在数据存储方面,它们在各个方面都优于Cookie,因为它们不会随每个请求一起发送到服务器(虽然这并不是说Cookie是无用的——两者都有各自的优势)

这真的很简单;)

看一看。历史可能一点也不有趣,但它至少提供了一个指向本教程中其他教程的优秀链接列表

现在来看看你的代码。首先要提到的是,
localStorage
没有过期-它是持久的(直到用户手动清除所有内容)。如果您想使用较短的存储空间,还可以使用
会话存储
,该存储空间具有相同的界面,但仅在浏览器关闭之前有效

重新表述代码很简单:

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

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

我在其他答案中使用了这些信息,所以这不是一个不同的答案,但我只是认为看到我最终得到的完整代码会对其他人有所帮助。这可以作为使用cookies的替代品(就像我做的那样)。它测试本地存储,如果存在,则使用该存储,如果没有,则使用cookie

注意:在实施时,您可能需要删除警报


规格最近有变化吗?或者localStorage仍然是
string
唯一的吗?它只是字符串,但是cookies也是,所以在这个特定的上下文中并不重要。无论如何,您都可以序列化对象,所以这不像仅字符串是一种限制(尽管自动序列化会很好),但是所有浏览器上都使用本地存储吗?我通常会编写自己的重定向方法来解决这个问题,比如
setLocalStorate(name,val){localStorage.setItme(name,JSON.stringify(val));}
我只是希望我不再需要:)差不多了。您可以随时检查它是否存在(
if(typeof localStorage!=“undefined”)
),如果它不存在,则返回cookies。
function getCookie(c_name) {
    return localStorage.getItem(c_name);
}

function setCookie(c_name, value, expiredays) {
    return localStorage.setItem(c_name, value);
}
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());
    }
}