我构建了一个自定义插件,使我能够使用会话将参数从一个页面传递到其他页面,而无需获取参数。
这很有效。
基本上,我是这样开始我的课程的:
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失败)如果我对开始会话行进行注释,则不会再出现这两个错误。但我需要这个疗程。我怎样才能让它与众不同?
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会话是不必要的)。