我在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”而不是序列化($ _ post)。出于某种原因而言不起作用。

有什么想法,为什么会发生这种情况?我尝试做chdir('..');要使cookie dir到正确的位置,但这似乎不是问题,检查我的浏览器内部的cookie似乎根本无法使用任何路径。它根本不起作用。我也只是尝试手动更改域和路径,但它们也不起作用。

有帮助吗?

解决方案

首先,chdir()的东西是红色的 - cookie是特定于域的;目录路径对它们没有任何影响。

当您进行Ajax类型调用时,cookie可能会奇怪地工作,我认为这就是您看到的 - 服务器可能正在设置cookie,但是浏览器可能不会在cookie数据中设置它,因为它是它的没有页面加载。

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

如果您真的想使用cookie,则使用JavaScript执行此操作可能会更好。您可以通过访问document.cookie在JavaScript代码中设置Cookie。 (您需要为cookie字符串正确获取语法,但是jQuery可能具有自己的功能,使它们更易于使用)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top