【问题标题】:Can't read cookies through PHP or Javascript when on an iPad在 iPad 上无法通过 PHP 或 Javascript 读取 cookie
【发布时间】:2011-09-13 10:36:44
【问题描述】:

我目前在尝试使用 PHP 或 Javascript 读取 cookie 时遇到一些问题。我试过使用:

if(!$_COOKIE['popup_closed']
&& !isset($_COOKIE['username'])
&& !isset($_COOKIE['password'])
)

我已经试过了:

if(
$.cookie('popup_closed') == null
&& $.cookie('username') == null
&& $.cookie('password') == null) {
doStuff();
}

(使用 jquery.cookie 插件)

它们都不能在 iPad 上运行。它适用于所有浏览器,我尝试用谷歌搜索这个问题,但似乎没有太多关于在 iPad 上读取 cookie 的信息。

感谢你们提供的任何帮助!

【问题讨论】:

  • 您的代码在 Safary(Mac 或 PC)上运行良好吗?它应该在 iPad 上同样工作。
  • 确实如此。 iPad 上也开启了 Cookie。
  • 不幸的是,我不知道为什么它不起作用,但前段时间我在所有 Safari 版本(Mac、PC、iPad 等)上都遇到了与 cookie 有关的问题。这是 Safari 的内置限制(除非用户明确与网页交互,否则 Safari 不接受来自第三方网站的 cookie)。也许您正在尝试使用 iframe 中的 cookie?
  • 好吧,我想问题不在于技术上的 cookie,而在于检查是否存在 cookie,这似乎是第一个障碍。
  • 你是对的。我能找到的所有信息都是你的标准,“如何接受 cookie”、“如何读取和写入 cookie”等。事实上,这个问题是我能找到的唯一的东西。 :) 也许您可以与 Apple 的支持人员联系并在此处发布答案。

标签: php javascript jquery ipad mobile


【解决方案1】:

这确实是一种解决方法,但如果可用,您可以使用本地存储 - 至少我已经在 iPad/iPhone 上成功使用过它。

以这种解决方案为例。

function saveData(name, value) {
    if (typeof(localStorage) != 'undefined') {
        localStorage.setItem(name, value);
    } else {
        createCookie(name, value, 7);
    }
}

function loadData(name) {
    var temp_value = '';

    if (typeof(localStorage) != 'undefined') {
        temp_value = localStorage.getItem(name);
    } else {
        temp_value = readCookie(name);
    }

    return temp_value;
}

function eraseData(name) {
    if (typeof(localStorage) != 'undefined') {
        localStorage.removeItem(name);
    } else {
         eraseCookie(name);
    }

}

function createCookie(name,value,days) {
    var expires = "";

    if (days) {
        var date = new Date();
        date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
        expires = "; expires=" + date.toGMTString();
    }
    else {
        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);
}

【讨论】:

  • 嗨,马库斯,谢谢!我会在下周二看看它是否有效,因为那是我在相关网站上工作的那一天。如果可行,我将在星期二接受您的回答:) 再次感谢。
  • 嗨,没问题,很高兴听到该解决方案对您有用!
  • 如果用户禁用了 cookie,localstorage 也不会工作。并且本地存储没有服务器端检查
【解决方案2】:

你看过关于 setcookie 的manual 吗?您应该使用所有变量,也许这解决了您无法使用 JS 访问 cookie 的事实?另外,使用原生 JS 来访问 cookie(而不是 jQuery),难道不行吗?

【讨论】:

    猜你喜欢
    • 2015-10-18
    • 1970-01-01
    • 1970-01-01
    • 2012-11-20
    • 1970-01-01
    • 1970-01-01
    • 2015-05-19
    • 1970-01-01
    • 2015-07-13
    相关资源
    最近更新 更多