【问题标题】:Setcookie won't work?设置cookie不起作用?
【发布时间】:2011-04-13 17:00:40
【问题描述】:

我定期在我的 Twitter 应用程序的回调页面中设置 cookie。一切正常。

现在,使用 jQuery,我提交了一个表单,回调函数激活了一个 PHP 脚本。该脚本只需将一个 cookie 设置为 $_POST 的序列化值;并且值运行良好(序列化和正常,我将它们回显以进行调试)。到期时间设置为提前 1 年。但由于某种原因,cookie 不会出现在任何地方。代码如下:

// js/main.js
$('#settings-form').live('submit', function() {
    $.post('controllers/settings.php', $(this).serialize(), function(data) { // Everything here works.
        if (data == 'OK') // no errors spits out "OK". this works
            changeView({'msg': 'Your settings were saved successfully.'}); // This just resets the view and adds a message div at the top. This works
        else
            changeView({'msg': data}); // This echoes the error if any exists. Doesn't happen, no errors arise
    });
    return false; // Cancels redirecting after submitting form
});
// controllers/settings.php
setcookie('user_settings', serialize($_POST), strtotime('+1 year'));

我检查了所有变量,甚至尝试设置虚拟变量进行测试(例如“boo”而不是 serialize($_POST)。由于某种原因不起作用。

任何想法为什么会发生这种情况?我试着做一个 chdir('..');使 cookie 目录转到正确的位置,但这似乎不是问题,检查我的浏览器中的 cookie 似乎根本不起作用,对于任何路径。它根本不起作用。我也只是尝试手动更改域和路径,但这些也不起作用。

【问题讨论】:

    标签: php jquery cookies setcookie


    【解决方案1】:

    首先,chdir() 是一个红鲱鱼——Cookie 是特定于域的;目录路径与它们没有任何关系。

    当您进行 ajax 类型调用时,Cookie 可能会有点奇怪,我想这就是您所看到的 -- 服务器可能正在设置 cookie,但浏览器可能没有在 cookie 数据中设置它它不是页面加载。

    我建议您最好使用 PHP 的会话处理而不是 cookie;更好的安全性,更少的带宽(因为整个 cookie 数据在每个 http 单个请求中双向传输),并且更有可能工作。

    如果您真的想使用 cookie,使用 Javascript 可能会更好。您可以通过访问 document.cookie 在您的 javascript 代码中设置 cookie。 (您需要为 cookie 字符串获取正确的语法,但 JQuery 可能有自己的函数,使它们更易于使用)

    【讨论】:

    • 好吧,我所做的就是将两者结合起来——使用 JS 设置 cookie,但使用 PHP 来获取正确的值,以便我可以轻松使用它。谢谢!可惜我不得不用 JS 来解决。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-12
    • 2013-09-18
    • 2013-07-10
    • 1970-01-01
    • 2012-05-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多