2011-03-08 65 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