2

Twitterアプリケーションのコールバックページで定期的にCookieを設定しています。すべてが正常に動作します。

ここで、jQueryを使用してフォームを送信すると、コールバック関数がPHPスクリプトをアクティブ化します。そのスクリプトは、1つの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'));

私はすべての変数をチェックし、テスト用にダミーの変数を設定しようとしました(serialize($ _ POST)の代わりに "boo"など)何らかの理由で機能しません。

なぜこれが起こっているのか考えはありますか?chdir('..');をやってみました cookie dirを正しい場所に移動させるためですが、それは問題ではないようです。ブラウザ内のcookieをチェックしても、どのパスでもまったく機能しないようです。まったく機能しません。ドメインとパスを手動で変更しようとしましたが、どちらも機能しません。

4

1 に答える 1

2

まず、chdir()は赤字です。Cookieはドメイン固有です。ディレクトリパスはそれらとは関係ありません。

ajaxタイプの呼び出しを行う場合、Cookieは少し奇妙に機能する可能性があり、これが表示されていると思います-サーバーはおそらくCookieを設定していますが、ブラウザーはCookieデータにCookieを設定していない可能性がありますページの読み込みではありません。

CookieよりもPHPのセッション処理を使用したほうがよいと思います。セキュリティに優れており、帯域幅が少なく(Cookieデータ全体がhttpの単一リクエストごとに双方向に送信されるため)、機能する可能性が高くなります。

本当にCookieを使用したい場合は、Javascriptを使用した方がうまくいく可能性があります。document.cookieにアクセスして、javascriptコードにCookieを設定できます。(Cookie文字列の構文を正しく取得する必要がありますが、JQueryにはおそらく、操作を容易にする独自の関数があります)

于 2010-09-17T12:39:18.153 に答える