2011-03-08 86 views
0

我有疑問,如果能清除它,我會很感激。關於PHP Cookies的疑問

COOKIES

Cookies是什麼?當被描述爲實體時,在對話中cookie往往被引用爲 ,這很容易被誤導。 Cookie實際上只是HTTP協議的擴展。具體而言,有兩個附加的HTTP標頭:設置Cookie和這些cookie的 Cookie.The操作最好是通過以下一系列 事件描述:

  1. 客戶端發送一個HTTP請求給服務器。

  2. 服務器向客戶端發送帶有Set-Cookie:foo = bar的HTTP響應。

  3. 客戶端向Cookie發送一個HTTP請求:foo = bar到服務器。

  4. 服務器向客戶端發送HTTP響應。

因此,典型的場景涉及兩個完整的HTTP事務。在步驟2中,服務器 要求客戶在將來的請求中返回特定的cookie。在步驟3中,如果 用戶的首選項設置爲允許Cookie,並且cookie對於此特定請求有效,則瀏覽器會再次請求該資源,但會包含Cookie。

現在的問題是.......

爲什麼你不能確定用戶的偏好是否設置的第一個請求時允許Cookie ????

回答

5

另一個答案已經是正確的,如果沒有東西來「觸發」它們,步驟3 &不會發生。當檢測用戶是否啓用了cookies時,通常通過HTTP重定向,或者可能使用一些Javascript(例如,如果您還想檢測到它們已啓用Javascript),則可以使用此功能。

第一個請求是要求客戶端設置cookie,第二個請求是檢查客戶端是否確實做了您要求的操作。

無法檢測餅乾是否沒有第二個請求啓用的原因是因爲很多客戶會,當他們看到「設置Cookie」頭,提示用戶,看他們是否願意接受它或不。因此,在最初的請求中,客戶端不可能包含特殊的「我接受cookie」或「我不接受」標題,因爲它只是在您實際提供Cookie之前根本不知道答案。

有許多相似之處這種過程:

  1. 要檢查您是否有權訪問文件的文件系統上,你需要嘗試打開該文件。
  2. 要檢查用戶是否啓用了Javascript,您必須嘗試運行一些Javascript。
  3. 要確定文件的壓縮大小,您必須實際壓縮它。

等等。因此,要檢查用戶是否允許cookie,您必須嘗試設置一個。

2

首先,刷新不會發生,除非用戶明確觸發它,所以步驟3和4是錯誤的。在任何情況下,瀏覽器都不會將關於它是否接受cookie的信息發送給服務器。瀏覽器會自行決定是否存儲Cookie。

+0

我已經採取了這些步驟...從Zend認證文件..我不認爲這些可能會出錯 – PHP 2011-03-08 06:41:30

+0

@Richa沒有錯,但不完整。 waiwai想要了解的是,#2和#3之間可能有一個步驟,即「某個事件觸發新的HTTP請求」。這可能是用戶點擊一個鏈接,或者它可能是用戶控制之外的東西,例如重定向瀏覽器的「Location」標題。 – 2011-03-08 07:25:03

+0

@waiwai鑑於最後一條評論的後半部分,確實有可能通過強制重定向進行cookie檢測。然而,你需要特別小心不要進入重定向循環。 – 2011-03-08 07:28:26