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.
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
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
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);