2010-09-17 125 views
2

我定期在我的Twitter應用程序的回調頁面中設置Cookie。一切正常。Setcookie不會工作?

現在,我使用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')); 

我檢查所有的變量,我甚至嘗試了測試(如設置啞的人「噓」,而不是序列化($ _ POST)由於某種原因不能正常工作。

任何想法,爲什麼發生這種情況?我試着做一個chdir('..');使cookie指向正確的位置,但這似乎不是問題,檢查我的cookie瀏覽器似乎根本無法工作,對於任何路徑,它根本無法工作,我也只是嘗試手動更改域和路徑,但這些都不起作用。

回答

2

首先,chdir()是一個紅鯡魚 - Cookie是特定領域的;目錄路徑對它們沒有任何影響。

當您進行ajax類型的調用時,Cookie可能會有點奇怪,我想這就是您所看到的 - 服務器可能設置了Cookie,但瀏覽器可能沒有將其設置在Cookie中數據,因爲它不是一個頁面加載。

我建議你最好使用PHP的會話處理而不是cookie;這對安全性更好,帶寬更少(因爲整個cookie數據在每個http單個請求都在雙向傳輸),並且更有可能工作。

如果你真的想要使用cookies,如果你使用Javascript來做它可能會更好。您可以通過訪問document.cookie在JavaScript代碼中設置Cookie。 (你需要獲得cookie字符串的正確語法,但jQuery可能有自己的功能,使它們更容易使用)

+0

好的,我所做的是將兩個使用的JS結合起來設置cookie,但PHP讓價值正確,以便我可以輕鬆使用它。謝謝!太糟糕了,我不得不與JS解決方法。 – casraf 2010-09-17 13:08:05