2011-07-11 50 views
2

我想讀一個cookie,我已經用javascript,jQuery Cookie Plugin專門設置了一個cookie,然後我用PHP將它讀入數據庫。用PHP讀取cookies

由於某種原因,Cookie正在頁面加載時創建,但在頁面刷新前不會「存在」。這意味着我正在將空白字段輸入到數據庫表中。

我能想到的唯一方法就是將AJAX輸出到創建cookie的腳本中。或者ajax輸出到一個在json中將數據返回給我的腳本。

用例是我爲一個內部項目創建了一個簡單的分析類,並且我想在數據庫中寫入用戶分辨率,顏色深度和所有爵士樂,我正在使用screen.width等要得到。

回答

5

當客戶端執行請求時,Cookie數據被髮送到服務器(並轉發給PHP解釋器)。因此,在客戶端之後的頁面已經被服務器請求的JavaScript設置的cookie將不會被髮送,直到下一個請求到同一服務器。

What you have

什麼你必須做的是執行某種要求(可以通過AJAX來完成),其中一個PHP腳本處理的DB傳入cookie信息,並將其存儲。

What you need

+0

啊,這是合乎邏輯的。 –

0

@jensgram是正確的。這兩種情況可能發生:

  1. 用戶請求您的頁面和(或)他沒有cookie。您通過PHP呈現響應,但您無法在服務器上看到cookie。將響應傳遞給瀏覽器並在DOMReady(或類似事件)上設置Cookie。用戶發送另一個請求(通過與您的頁面交互)。這裏你有服務器上的cookie。
  2. 用戶已經擁有cookie(回到您的網站)併發送請求。您通過PHP呈現響應,但是這一次,cookie在第一鏡頭中可用。其餘的都是一樣的。

兩個建議:

  1. 爲了防止插入空(或空)值到你的數據庫,首先查看是否cookie存在與否。如果沒有,只需設置它。
  2. 對於實施分析,存在預定義的模式。例如,您可以在每個頁面上加載腳本,而不是設置Cookie,而是在每個頁面上加載腳本,以獲取所需的信息,並向您的Analytics Collector PHP文件發送異步ajax請求。不需要cookie :)
+0

但我的印象是你無法使用PHP獲得用戶屏幕分辨率。因此,我包括的JavaScript,並使用cookie作爲Javascript和PHP之間的翻譯:) –

+0

正如我所說,爲什麼使用cookie?只需創建一個JavaScript對象(類似於{width:'1024',height:'768',userAgent:'Firefox'}),並通過ajax發送。但我明白了你的意思:),祝你好運! –