我正在使用我正在处理的Wordpress插件。 PHP会话的行为不一致。我读过以下文章:
https://wordpress.stackexchange.com/questions/121144/session-in-wordpress-plugin-development
https://silvermapleweb.com/using-the-php-session-in-wordpress/
还有更多关于使用init钩子启动会话的相同建议。
我在我的插件中实现了这个:
add_action('init', 'set_session', 1);
function set_session(){
if(!session_id()){
session_start();
}
}
会话仍然表现得很奇怪,所以我创建了一个测试来查看是否正在设置会话。
$_SESSION['GuestID'] = 'test';
if(!session_id()){
echo 'Session Not Started';
} else{
if(isset($_SESSION['GuestID'])){
echo 'Guest ID From Session: '.$_SESSION['GuestID'];
} else{
echo 'Guest ID not set in Session!';
}
}
当我运行此客户ID时,将返回“来自会话的客户ID:测试”,但是如果您重新加载尝试从其他页面访问会话,则会收到“未在会话中设置的访客ID!”信息。对我来说,这表明会话已经启动,但由于某种原因,它没有存储我的会话数据。
我还可以看到没有为会话ID存储cookie。
所有这一切的奇怪之处在于,如果我登录到Wordpress管理员,PHP会话ID存储在cookie中,并且会话按预期运行!
可能导致这种情况的原因是什么?我该如何解决这个问题?
答案 0 :(得分:3)
在做了一些进一步的研究之后,似乎一些Wordpress优化的托管服务具有高级别的缓存,可以向浏览器提供静态内容,而无需在每个请求上执行PHP。登录wordpress站点的admin部分时,这些缓存服务不会运行,从而导致会话性能不一致。在访问缓存页面时,Sessions不起作用,在没有缓存时工作。
我的托管服务提供商使用Varnish,并且为相关网站停用Varnish已解决了该问题。