【问题标题】:Doubt related to PHP Cookies与 PHP Cookies 相关的疑问
【发布时间】:2011-03-09 10:32:56
【问题描述】:

我有一个疑问,如果你能解决它,我将不胜感激。

饼干

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

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

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

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

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

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

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

为什么您无法确定用户的首选项是否设置为在第一次请求期间允许使用 cookie????

【问题讨论】:

    标签: php


    【解决方案1】:

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

    第一个请求是要求客户端设置 cookie,第二个请求是检查客户端是否确实按照您的要求执行。

    如果没有第二次请求,您无法检测 cookie 是否启用的原因是因为许多客户端会在看到“Set-Cookie”标头时提示用户查看他们是否想要接受与否。因此,客户端不可能在初始请求中包含特殊的“我接受 cookie”或“我不接受”标头,因为它根本不知道答案,直到您实际使用 cookie 呈现它。

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

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

    等等。因此,要检查用户是否允许 cookie,您必须实际尝试设置一个。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 我已经从 Zend 认证文档中采取了这些步骤......我不认为这些可能会出错
      • @Richa 并没有错,而是不完整。 waiwai 试图理解的是,在 #2 和 #3 之间可能应该有一个步骤,即“某些事件触发了一个新的 HTTP 请求”。这可能是用户单击链接,也可能是用户无法控制的内容,例如重定向浏览器的 Location 标头。
      • @waiwai 鉴于我上次评论的后半部分,确实可以通过强制重定向进行 cookie 检测。但是,您需要格外小心,不要进入重定向循环。
      • 你们都可以在这里阅读更多内容:stackoverflow.com/questions/210321/…
      • @matthew... 现在我已经编辑了(现在是书上所说的完整段落).. 但是没有步骤提到 b/w 这些.. 甚至他们也没有谈论它。 .
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-05
      • 1970-01-01
      • 1970-01-01
      • 2011-11-20
      • 2014-10-05
      • 2012-07-07
      相关资源
      最近更新 更多