我在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目录转到正确的位置,但这似乎不是问题,检查浏览器中的cookie似乎根本不起作用,对于任何路径。它根本不起作用。我也尝试手动更改域和路径,但这些也不起作用。
答案 0 :(得分:2)
首先,chdir()是一个红鲱鱼 - Cookies是特定领域的;目录路径与它们没有任何关系。
当您进行ajax类型调用时,Cookie可能会有点奇怪,我认为这就是您所看到的 - 服务器可能正在设置cookie,但浏览器可能没有在cookie数据中设置它因为它不是页面加载。
我建议你最好使用PHP的会话处理而不是cookie;它更安全,带宽更少(因为每个http单一请求都会在两个方向上传输整个cookie数据),并且更有可能工作。
如果你真的想使用cookies,如果你使用Javascript来做它可能会更好。您可以通过访问document.cookie在您的JavaScript代码中设置Cookie。 (你需要获得cookie字符串的语法,但JQuery可能有自己的函数,使它们更容易使用)