【问题标题】:Can I modify or add cookies from JavaScript? [closed]我可以从 JavaScript 修改或添加 cookie 吗? [关闭]
【发布时间】:2017-01-31 14:10:25
【问题描述】:

从 javascript 处理浏览器 cookie 的具体限制是什么?例如,我可以检查是否启用了 cookie?

【问题讨论】:

    标签: javascript cookies client-side


    【解决方案1】:

    是的! Read this excellent article about using cookies with JavaScript

    这是一个摘录的代码示例。

    function createCookie(name,value,days) {
        if (days) {
            var date = new Date();
            date.setTime(date.getTime()+(days*24*60*60*1000));
            var expires = "; expires="+date.toGMTString();
        }
        else var expires = "";
        document.cookie = name+"="+value+expires+"; path=/";
    }
    
    function readCookie(name) {
        var nameEQ = name + "=";
        var ca = document.cookie.split(';');
        for(var i=0;i < ca.length;i++) {
            var c = ca[i];
            while (c.charAt(0)==' ') c = c.substring(1,c.length);
            if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
        }
        return null;
    }
    
    function eraseCookie(name) {
        createCookie(name,"",-1);
    }
    

    至于测试它们是否被启用。我喜欢 jldupont 的回答。

    【讨论】:

    • 有工作脚本的好文章。
    • 谢谢!!很好的例子。
    【解决方案2】:

    您编写一个 cookie 并尝试回读:这样,您就会知道 cookie 是否已启用。

    【讨论】:

      【解决方案3】:

      你可以使用navigator.cookieEnabled,但我不确定它是否被所有浏览器支持。

      有关 cookie 的更多信息,请查看this

      【讨论】:

        【解决方案4】:

        例如,我可以检查是否启用了 cookie 吗?

        是的,但并不像您想象的那么容易。 navigator.cookieEnabled 是一个非常笼统的标志,它并没有准确涵盖在什么情况下可以设置 cookie。

        例如,会话 cookie 可能被允许但持久性 cookie 被阻止。因此,除非您继续尝试,通过设置一个虚拟的 document.cookie 然后再读取 document.cookie 以查看是否成功,否则您不会真正知道 cookie 集是否会成功。

        在许多浏览器中,当永久 cookie 被禁用时,永久 cookie 将被降级为会话 cookie。但不是 IE,它只会阻止它。您可以尝试通过将持久 cookie 和会话 cookie 都设置为 document.cookie 并查看是否有幸存者来检测。

        【讨论】:

          【解决方案5】:

          关于通过 JavaScript 操作 cookie 的 quirksmode 上有一篇很棒的文章: http://www.quirksmode.org/js/cookies.html

          【讨论】:

            【解决方案6】:

            W3Schools JavaScript Cookies 代码中有一个错误。在函数 setCookie 中这一行:

            exdate.setDate(exdate.getDate()+expiredays);
            

            JavaScript 日期对象属性:

            getDate() - Returns the day of the month (from 1-31)  
            ...  
            getTime() - Returns the number of milliseconds since midnight Jan 1, 1970  
            ... 
            
            getDate() plus the number of days is not going to work.  I think it should be something like this:  
            
            expire = expiredays * 1000 * 60 * 60 * 24; // convert to milliseconds  
            var exdate = new Date( today.getTime() + (expire) );
            

            TechPatterns.com Javascript Cookie Script Get Cookie, Set Cookie, Delete Cookie Functions 的 cookie 库效果更好(Google 结果中的第一名并不总是最好的)。

            我在 IE8 中测试了两个页面的代码,第一个导致我的 cookie 的过期日期为 2038 年 1 月 1 日凌晨 1:00。第二个示例中的代码将我的 cookie 过期日期设置为从我测试它起正好 1 天,正如预期的那样。

            【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2014-02-13
            • 1970-01-01
            • 1970-01-01
            • 2010-10-04
            • 1970-01-01
            • 2011-10-04
            • 2017-09-06
            • 2019-01-30
            相关资源
            最近更新 更多