瞬态只是过期的数据库密钥。这就像告诉WordPress你想让它记住某一条信息,但时间有限。通常,PHP可以通过任何请求访问瞬态。
但是,由于它们是服务器端的,因此只有当您作为开发人员公开瞬态时,才会向前端用户公开瞬态。
针对您的具体问题,有一个解决方案:
我加载生成一个随机数的主页,并将其存储到一个瞬态中,该瞬态应该可以在同一会话中访问。
我建议将瞬态与cookie配对。基本上,为每个请求生成一个唯一的密钥(可能是time()
和一些随机数),并将其用作用户的会话密钥。然后,您可以仅为该用户存储瞬态。请确保以cookie的方式将此唯一键传递给浏览器,下次同一用户刷新页面时,他们将获得相同的数字。
给你一些untested 伪代码。。。
/**
* Check the user\'s cookie if they have it.
* Create one if they don\'t.
*/
function wpa_105249_check_cookie() {
if ( isset( $_COOKIE[\'wpa_105249_key\'] ) ) {
$key = (string) $_COOKIE[\'wpa_105249_key\'];
} else {
$key = md5( time() . rand() );
// Set the browser cookie to expire in 30 minutes
set_cookie( \'wpa_105249_key\', $key, time() + 30 * 60 )
}
// Try to grab the transient from the database, if it exists.
$transient = get_transient( \'wpa_105249_\' . $key );
// If the transient doesn\'t exist, create it.
if ( false === $transient ) {
// Call your function to generate the random number.
$transient = generate_random_number();
// Store the transient, but expire in 30 minutes.
set_transient( \'wpa_105249_\' . $key, $transient, 30 * 60 );
}
wp_cache_set( \'wpa_105249_number\', $transient );
}
add_action( \'plugins_loaded\', \'wpa_105249_check_cookie\' );
简单地说,这将:
检查wpa_105249_key
请求中的cookie如果cookie不存在,请创建一个在页面的响应标题中设置cookie,以便浏览器下次使用
- 尝试获取由cookie标识的瞬态如果瞬态不存在,使用函数生成一个新的随机数,并将其存储在瞬态中以备下次使用
在请求缓存中设置随机数在此之后调用的任何代码-基本上是代码中的任何其他地方-您只需调用以下命令即可获取当前用户的随机数:
$number = wp_cache_get( \'wpa_105249_number\' );