怀疑与PHP Cookies有关

时间:2011-03-08 06:18:25

标签: php

我有疑问,如果你能清除它,我将不胜感激。

缓存

什么是cookies?当描述为实体时,通常引用cookie的方式 在谈话中,你很容易被误导。 Cookie实际上只是一个扩展 HTTP协议。具体来说,还有两个额外的HTTP标头:Set-Cookie和 Cookie。这些cookie的操作最好用以下系列描述 事件:

  1. 客户端向服务器发送HTTP请求。

  2. 服务器使用Set-Cookie:foo = bar向客户端发送HTTP响应。

  3. 客户端向服务器发送带有Cookie:foo = bar的HTTP请求。

  4. 服务器向客户端发送HTTP响应。

  5. 因此,典型的场景涉及两个完整的HTTP事务。在步骤2中,服务器 要求客户在将来的请求中返回特定的cookie。在第3步,如果 用户的首选项设置为允许cookie,如果cookie对此特定有效 请求,浏览器再次请求资源但包含cookie。

    现在我的问题是.......

    为什么你无法确定在第一次请求期间是否将用户的偏好设置为允许cookie ????

2 个答案:

答案 0 :(得分:5)

另一个答案已经是正确的,步骤3&没有“触发”它们的东西就不会发生4。当检测用户是否启用了cookie时,通常使用HTTP重定向,或者可能使用某些Javascript(例如,如果您还想检测到他们启用了Javascript)。

第一个请求是要求客户端设置cookie,第二个请求是检查客户端是否实际执行了您要求它执行的操作。

您无法检测是否在没有第二个请求的情况下启用Cookie的原因是因为许多客户端在看到“Set-Cookie”标头时会提示用户以查看是否需要接受与否。因此,客户端不可能在初始请求中包含特殊的“我接受cookie”或“我不接受”标题,因为在您实际使用cookie时,它只是不知道答案。

这种过程有许多相似之处:

  1. 要检查您是否有权访问文件系统上的文件,您需要尝试打开该文件。
  2. 要检查用户是否启用了Javascript,您必须实际尝试运行一些Javascript。
  3. 要确定文件的压缩大小,您必须实际压缩它。
  4. 等等。因此,要检查用户是否允许使用cookie,您必须尝试设置cookie。

答案 1 :(得分:2)

首先,除非用户专门触发它,否则不会发生刷新,因此步骤3和4是错误的。在任何情况下,浏览器都不会发送有关它是否接受服务器cookie的信息。浏览器自行决定是否存储cookie。