Est-ce que WP transitoires est spécifique à la session utilisateur ou est-il accessible depuis n'importe quelle session?
Comme ils sont écrits dans la base de données, j'imagine qu'ils sont publics et accessibles partout, mais existe-t-il un moyen de limiter leur étendue à une seule session d'utilisateur?
Le site Web que je construis ne propose pas d'option de connexion/membre. Par utilisateur je veux dire toute personne qui consulte le site Web - je pas parle de wp_users
!
Exemple:
Je charge la page d'accueil qui génère un nombre aléatoire et le stocke dans un transitoire qui devrait être accessible au cours de la même session.
Cependant, même à partir du même ordinateur, mais à partir d'un navigateur différent, ou d'une adresse IP différente, je ne devrais pas pouvoir accéder à ce transitoire ...
Est-ce possible?
Les transitoires ne sont que des clés de base de données qui expirent. C'est comme dire à WordPress que vous voulez qu'il se souvienne d'une certaine information, mais pour une durée limitée. En général, les transitoires sont accessibles à PHP via toute requête.
Mais comme ils sont côté serveur, les transitoires ne sont exposés aux utilisateurs frontaux que si vous, en tant que développeur, les exposez.
Compte tenu de votre question spécifique:
Je charge la page d'accueil qui génère un nombre aléatoire et le stocke dans un transitoire qui devrait être accessible au cours de la même session.
Je recommanderais de coupler les transitoires avec des cookies. Généralement, générez une clé unique pour chaque demande (peut-être un hachage de time()
et un nombre aléatoire) et utilisez-la comme clé de session de l'utilisateur. Ensuite, vous pouvez stocker un transitoire pour uniquement cet utilisateur . Assurez-vous de transmettre cette clé unique au navigateur sous forme de cookie, et la prochaine fois que ce même utilisateur actualisera la page, il obtiendra le même numéro.
Pour vous donner un peu de non testé pseudo-code ...
/**
* 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' );
En clair, cela va:
wpa_105249_key
dans la demande N'importe quel code que vous appelez après cela - essentiellement n'importe où ailleurs dans votre code - vous pouvez récupérer le numéro aléatoire de l'utilisateur actuel en appelant simplement:
$number = wp_cache_get( 'wpa_105249_number' );
Les transitoires sont un mécanisme de stockage persistant. Cela signifie qu'en enregistrant les éléments transitoires avec certaines clés, vous pourrez récupérer le même éléments transitoires avec cette clé (si elle n'a pas expiré et si le cache n'a pas été vidé depuis).
"Public" ne s'applique pas vraiment à eux, car ils sont un concept de code interne et la seule chose qui y accède est votre code, pas le navigateur de l'utilisateur.
Si vous souhaitez stocker des données spécifiques à l'utilisateur dans des éléments transitoires, il sera probablement difficile de fournir des clés spécifiques à l'utilisateur.
Stocker des informations dans les cookies de l'utilisateur ou utiliser un mécanisme de session approprié conviendra probablement mieux.