【问题标题】:WordPress 4.9.3, $_COOKIE, and session_start()WordPress 4.9.3、$_COOKIE 和 session_start()
【发布时间】:2018-03-30 01:02:57
【问题描述】:

我解决了我的问题,但我不知道它为什么有效。我希望有人能解释一下吗?

我有一个 WordPress 网站。如果新用户访问该站点,他们会在主页上看到一个通用元素。当他们访问内部页面时,会创建一个 cookie。当用户再次访问主页时,他们会看到基于 cookie 的自定义元素。

我遇到的问题是,当用户从内部页面返回主页时,即使新 cookie 设置了正确的值,$COOKIE 超全局变量在执行刷新之前不会重置。您可以根据需要导航到尽可能多的不同页面,但在执行字面刷新之前,超全局仍然不会重置。这是同时使用 setcookie() 和直接设置超级全局。

已通过将 session_start() 添加到标头来解决此问题。我认为 session_start() 影响了 SESSION 超级全局。为什么这个解决方案也会影响到 COOKIE 超全球?

【问题讨论】:

  • 很可能它没有,不是直接的 - 但是sending different headers regarding caching,它影响了您的浏览器在再次显示相同的 URL 时被指示检查更改的方式,而在您只是得到一个陈旧的副本之前从缓存中呈现。
  • 这是有道理的。我认为这也与缓存有关——对我来说,cookie 也会被缓存似乎很奇怪。您知道添加 session_start() 是否会对网站的性能产生任何影响吗?我很难找到关于所有函数功能的好的文档。
  • 会话也是 cookie(无论如何 SESS ID 是),但我同意它可能是缓存。我不确定所有 session_start 的作用,但如果你没有任何问题,我不会太担心。
  • 感谢 cmets。 @CBroe 您可以将您的评论转换为答案吗?明天我将确认使用 session_start() 发送不同的缓存标头并接受您的回答。

标签: php wordpress cookies


【解决方案1】:

为什么这个解决方案也会影响 COOKIE 超全局?

很可能它没有,不是直接的 - 但sending different headers regarding caching,它影响了您的浏览器在再次显示相同的 URL 时被指示检查更改的方式,而在您只是从缓存中获得一个陈旧的副本之前。

cookie 也会被缓存在我看来很奇怪

不是 cookie 本身被“缓存”了——而是您根据 cookie 在其中进行任何输出的文档被“缓存”了。您仍然看到了您加载的页面的第一个版本 - 后面的 PHP 代码没有再次执行,因为浏览器实际上并没有再次从服务器请求 URL。

但是当服务器在第一次加载时发送了一个响应标头指示不应缓存此页面(或者客户端在再次显示资源之前与服务器检查)时 - 它导致浏览器创建一个新的返回页面时请求。

【讨论】:

  • 这是一个非常清楚的解释。感谢您的宝贵时间。
猜你喜欢
  • 2012-08-01
  • 2016-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-10
  • 2020-09-22
  • 2012-08-01
  • 1970-01-01
相关资源
最近更新 更多