it-swarm.dev

Qual è il modo corretto di impostare un cookie persistente in Joomla 3.x

Vorrei impostare un cookie di "destinazione" per tutti gli utenti del mio sito, per offrire contenuti personalizzati. Il cookie deve persistere tra login/logout, quindi sembra che non riesca a usare jSession, che viene cancellato al login/logout.

Posso raggiungere questo obiettivo alla vecchia maniera

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

... ma sono sicuro che Joomla abbia un modo migliore nascosto da qualche parte. PS: la documentazione su questo è praticamente inesistente per quanto posso trovare.

8
user2097091

Potresti dare un'occhiata al plugin di autenticazione dei cookie. Imposta e legge un cookie persistente.

Si trova qui: https://github.com/joomla/joomla-cms/tree/staging/plugins/authentication/cookie

Per leggere un cookie, è possibile utilizzare

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

Per impostare un cookie, si utilizza

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

Alcuni documenti sono disponibili nella pagina API: http://api.joomla.org/cms-3/classes/JInputCookie.html

5
Bakual

L'ultima volta che ho fatto alcune ricerche su quest'area (marzo 2013), ho trovato questa soluzione, che non utilizza JInput:

Ho verificato come JFactory chiama JSession ma non ho trovato un modo per impostare la scadenza durante la memorizzazione dei dati.

All'interno di un plugin di sistema, usando il metodo onAfterRender()

    $cookie = session_get_cookie_params();

    $cookie['lifetime'] = DESIRED LIFETIME;

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

L'unico back-draw che ho scoperto è che ora ci sono due cookie con nome e contenuto identici. Non ho notato effetti collaterali.

Spero che sia di aiuto.

Fonte: Joomla! Sviluppo generale ›Imposta scadenza sessione utente front-end

2
Valentin Despa

Prova a utilizzare qualcosa di simile al seguente:

$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