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


8

Vorrei impostare un cookie di "destinazione" per tutti gli utenti del mio sito, per offrire contenuti personalizzati. Il cookie deve persistere attraverso il 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.


JSession ha bisogno di un cookie per riconoscere una sessione, ma non sono la stessa cosa.
Valentin Despa,

Risposte:


5

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


Grazie. cercando di capirlo. La documentazione è mosyly indecifrabile per i principianti come me. Potresti forse mostrarmi come il cookie impostato si applica specificamente nel mio caso? come posso impostare la durata e a cosa serve il riferimento ssl?
user2097091,

In questo caso, $lifetimeproviene da un parametro nel plugin cookie. L'argomento è il momento in cui il cookie scadrà. Basta passare il tuo valore lì. L'argomento SSL indica se il cookie sarà valido solo su connessioni SSL. In questo caso sembra solo se si accede alla pagina usando SSL e imposta di conseguenza il flag sicuro nel cookie.
Bakual,

2

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 trovato è 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 la scadenza della sessione dell'utente front-end


2

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

Errore irreversibile: impossibile utilizzare il valore restituito dal metodo nel contesto di scrittura in /path/to/templates/template/html/com_entrusters/itemform/default.php sulla riga 28
user2097091,

@ user2097091 - Ho aggiunto accidentalmente un punto e virgola in più. Aggiornato il codice. Puoi riprovare adesso?
Lodder,

Stai usando la variabile $inputCookieche non hai definito - non dovrebbe essere $cookie?
Mr White,

@ w3d - ahh si il mio male. Aggiornato il codice. Grazie per
averlo
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.