ti-enxame.com

Qual é a maneira correta de definir um cookie persistente no Joomla 3.x

Gostaria de definir um cookie de "destino" para todos os usuários do meu site, para veicular conteúdo personalizado. O cookie precisa persistir durante o login/logout, de modo que parece que não posso usar o jSession, que é limpo no logon/logout.

Eu posso meio que conseguir isso da maneira antiquada

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

... mas eu tenho certeza que o joomla tem uma maneira melhor de esconder em algum lugar. PS - a documentação sobre isso é praticamente inexistente, tanto quanto eu posso encontrar.

8
user2097091

Você pode dar uma olhada no plugin de autenticação de cookies. Ele define e lê um cookie persistente.

Pode ser encontrado aqui: https://github.com/joomla/joomla-cms/tree/staging/plugins/authentication/cookie

Para ler um cookie, você pode usar

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

Para definir um cookie, você usa

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

Alguma documentação pode ser encontrada na página da API: http://api.joomla.org/cms-3/classes/JInputCookie.html

5
Bakual

Na última vez que fiz algumas pesquisas nesta área (março de 2013), encontrei esta solução, que não está usando o JInput:

Inspecionei como o JFactory chama JSession, mas não encontrei uma maneira de definir a expiração ao armazenar dados.

Dentro de um plugin do sistema, usando o 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);

O único retrocesso que encontrei foi que agora existem dois cookies com nome e conteúdo idênticos. Eu não notei nenhum efeito colateral.

Espero que isto ajude.

Fonte: Joomla! General Development ›Definir expiração da sessão do usuário front-end

2
Valentin Despa

Tente usar algo como o seguinte:

$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