web-dev-qa-db-fra.com

Quelle est la bonne façon de définir un cookie persistant dans Joomla 3.x?

Je souhaite créer un cookie "de destination" pour tous les utilisateurs de mon site, afin de proposer un contenu adapté. Le cookie doit persister lors de la connexion/déconnexion, de sorte que je ne peux pas utiliser jSession, ce qui est effacé lors de la connexion/déconnexion.

Je peux en quelque sorte atteindre cet objectif à l'ancienne

setcookie( "destinationcookie", $_POST['destination'], strtotime( '+90 days' ) );
$destination =  isset($_POST['destination']) ? $_POST['destination'] : $_COOKIE["destinationcookie"];

... mais je suis sûr que joomla a un meilleur moyen de se cacher quelque part. PS - la documentation à ce sujet est pratiquement inexistante pour autant que je puisse trouver.

8
user2097091

Vous voudrez peut-être jeter un coup d'œil au plugin d'authentification par cookie. Il définit et lit un cookie persistant.

Il se trouve ici: https://github.com/joomla/joomla-cms/tree/staging/plugins/authentication/cookie

Pour lire un cookie, vous pouvez utiliser

$app = JFactory::getApplication();
$cookieValue = $app->input->cookie->get($cookieName);

Pour définir un cookie, vous utilisez

$app = JFactory::getApplication();
$app->input->cookie->set($cookieName, $cookieValue, time() + $lifetime, $app->get('cookie_path', '/'), $app->get('cookie_domain'), $app->isSSLConnection());

Certains documents peuvent être trouvés sur la page API: http://api.joomla.org/cms-3/classes/JInputCookie.html

5
Bakual

La dernière fois que j'ai effectué des recherches dans ce domaine (mars 2013), j'ai trouvé cette solution, qui n'utilise pas JInput:

J'ai vérifié comment JFactory appelle JSession mais je n'ai pas trouvé de moyen de définir l'expiration lors du stockage de données.

Dans un plugin système, en utilisant la méthode onAfterRender()

    $cookie = session_get_cookie_params();

    $cookie['lifetime'] = DESIRED LIFETIME;

    session_set_cookie_params($cookie['lifetime'], $cookie['path'], $cookie['domain'], $cookie['secure'], true);

Le seul tirage en arrière que j'ai trouvé est que maintenant il y a deux cookies avec un nom et un contenu identiques. Je n'ai pas remarqué d'effets secondaires.

J'espère que cela t'aides.

Source: Développement général de Joomla! ›Réglage de l’expiration de la session de l’utilisateur frontal

2
Valentin Despa

Essayez d'utiliser quelque chose comme ce qui suit:

$input  = JFactory::getApplication()->input;
$cookie = $input->cookie;
$post = $input->post;

$cookie->set('destinationcookie', $post->get('destination'), strtotime( '+90 days' ));
$destination =  isset($post->get('destination')) ? $post->get('destination') : $cookie->get($name = 'destinationcookie', $defaultValue = null);
2
Lodder