Setcookie не будет работать? - PullRequest
       10

Setcookie не будет работать?

2 голосов
/ 17 сентября 2010

Я регулярно устанавливаю файлы cookie на странице обратного вызова в своем приложении Twitter. Все отлично работает.

Теперь, используя 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). По какой-то причине это не работает.

Есть идеи, почему это происходит? Я пытался сделать чдир ('..'); чтобы файл cookie направлялся в нужное место, но это не проблема, проверка файлов cookie в моем браузере, похоже, не работает вообще, для любого пути. Это просто не работает вообще. Я также попытался вручную изменить домен и путь, но они тоже не работают.

1 Ответ

2 голосов
/ 17 сентября 2010

Во-первых, функция chdir () - это красная сельдь - файлы cookie зависят от домена;путь к каталогу не имеет к ним никакого отношения.

Cookies могут работать немного странно, когда вы делаете вызовы типа ajax, и я думаю, что это то, что вы видите - сервер, вероятно, настраиваетcookie, но браузер, возможно, не устанавливает его в данных cookie, поскольку это не загрузка страницы.

Я бы посоветовал вам лучше использовать обработку сессий PHP, а не куки;это лучше для безопасности, меньше пропускная способность (потому что все данные cookie передаются в обоих направлениях при каждом HTTP-запросе), и более вероятно, что они будут работать.

Если вы действительно хотите использовать куки, они могут работатьлучше, если вы используете Javascript для этого.Вы можете установить куки в своем коде JavaScript, зайдя на document.cookie.(вам нужно получить правильный синтаксис для строки cookie, но JQuery, вероятно, имеет свои собственные функции, с которыми им легче работать)

...