在WP中使用会话时,API REST不会出现问题

时间:2022-01-21 作者:djoo

我构建了一个自定义插件,使我能够使用会话将参数从一个页面传递到其他页面,而无需获取参数。

这很有效。

基本上,我是这样开始我的课程的:

add_action(\'init\', \'myStartSession\', 1);
function myStartSession() {
if (session_status() == PHP_SESSION_NONE) {
  session_start();
}

}
然后在站点的不同部分设置如下会话变量

$_SESSION[\'key\']  = "value";
然后像这样结束

add_action(\'wp_logout\', \'myEndSession\');

function myEndSession() {
  session_destroy();
}
问题:如果我使用工具>;健康网站,我有2个错误:

检测到一个活动的PHP会话,API REST错误:cURL错误28:操作在10001毫秒后超时,接收到0个字节(http\\U request\\u失败)如果我对开始会话行进行注释,则不会再出现这两个错误。但我需要这个疗程。我怎样才能让它与众不同?

1 个回复
SO网友:Tom J Nowell

消除这种情况的唯一方法是不要使用PHP会话,而是直接使用Cookie。

PHP会话基本上与许多页面缓存和CDN机制不兼容,例如cloudflare、Varnish或Batchache或WP Supercache等完整页面缓存插件。PHP Sessions are also turned off and disabled on a lot of WP hosts e.g. WP Engine.

您不能依赖WordPress中的PHP会话,尤其是如果您想编写可移植代码或销售主题/插件。

PHP Sessions also can\'t be used to bypass cookies as the session ID itself is stored in a cookie. 由于用户可以在浏览器开发工具中更改此ID以检索其他用户的信息,因此也会产生安全后果。

而是使用标准cookie例如。setcookie( \'key\', \'value\' );. 这就是WordPress本身所做的,也是许多电子商务网站实现carts的方式(想想看,没有内置PHP的网站是如何做到的?PHP会话是不必要的)。

相关推荐

Large Session Tokens

我们在共享服务器上有一个Wordpress站点,最近由于磁盘空间不足而崩溃,因为我们的MySQL二进制日志在几分钟内就填满了驱动器。在查看了其中的内容后,我们追踪到该站点中的一个用户,该用户在usermeta 元键为的表session_tokens. 我为该用户单击了“随处注销”选项,删除了这些记录,但今天同样的问题开始出现,他的所有令牌都回来了。有什么想法吗?我真的不知道从哪里开始,也不知道他是如何积累了这么多代币的。我写了一个Wordpress计划的任务,应该每小时删除过期的门票,但由于他的帐户什么都