it-swarm-es.tech

¿Cuál es la forma correcta de configurar una cookie persistente en Joomla 3.x

Me gustaría establecer una cookie de "destino" para todos los usuarios en mi sitio, para servir contenido personalizado. La cookie debe persistir durante el inicio de sesión/cierre de sesión, por lo que parece que no puedo usar jSession, que se borra al iniciar sesión/cerrar sesión.

Puedo lograr esto a la antigua usanza

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

... pero estoy seguro de que Joomla tiene una mejor manera escondida en alguna parte. PD: la documentación sobre esto es prácticamente inexistente hasta donde puedo encontrar.

8
user2097091

Es posible que desee echar un vistazo al complemento de autenticación de cookies. Establece y lee una cookie persistente.

Se encuentra aquí: https://github.com/joomla/joomla-cms/tree/staging/plugins/authentication/cookie

Para leer una cookie, puede usar

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

Para configurar una cookie, usa

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

Puede encontrar documentación en la página de la API: http://api.joomla.org/cms-3/classes/JInputCookie.html

5
Bakual

La última vez que investigué un poco sobre esta área (marzo de 2013), encontré esta solución, que no usa JInput:

He inspeccionado cómo JFactory llama a JSession pero no he encontrado una manera de establecer la caducidad al almacenar datos.

Dentro de un complemento del sistema, utilizando el método onAfterRender()

    $cookie = session_get_cookie_params();

    $cookie['lifetime'] = DESIRED LIFETIME;

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

El único inconveniente que encontré fue que ahora hay dos cookies con el mismo nombre y contenido. No he notado ningún efecto secundario.

Espero que esto ayude.

Fuente: Desarrollo general de Joomla! ›Establecer la caducidad de la sesión de usuario front-end

2
Valentin Despa

Intenta usar algo como lo siguiente:

$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