Was ist der richtige Weg, um ein dauerhaftes Cookie in Joomla 3.x zu setzen?


8

Ich möchte ein "Ziel" -Cookie für alle Benutzer auf meiner Website setzen, um maßgeschneiderte Inhalte bereitzustellen. Das Cookie muss über das Anmelden / Abmelden hinweg bestehen bleiben, damit ich anscheinend jSession nicht verwenden kann, das beim Anmelden / Abmelden gelöscht wird.

Ich kann das irgendwie auf die altmodische Weise erreichen

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

... aber ich bin sicher, Joomla hat irgendwo einen besseren Weg versteckt. PS - die Dokumentation dazu ist meines Erachtens praktisch nicht vorhanden.


JSession benötigt ein Cookie, um eine Sitzung zu erkennen, aber sie sind nicht dasselbe.
Valentin Despa

Antworten:


5

Vielleicht möchten Sie sich das Cookie-Authentifizierungs-Plugin ansehen. Es setzt und liest einen dauerhaften Cookie.

Es ist hier zu finden: https://github.com/joomla/joomla-cms/tree/staging/plugins/authentication/cookie

Zum Lesen eines Cookies können Sie verwenden

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

Um ein Cookie zu setzen, verwenden Sie

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

Einige Dokumentationen finden Sie auf der API-Seite: http://api.joomla.org/cms-3/classes/JInputCookie.html


Vielen Dank. versuchen das zu verstehen. Die Dokumentation ist für Anfänger wie mich kaum zu entziffern. Können Sie mir möglicherweise zeigen, wie das gesetzte Cookie speziell in meinem Fall angewendet wird? Wie stelle ich die Lebensdauer ein und wofür ist die SSL-Referenz?
user2097091

In diesem Fall $lifetimekommt von einem Parameter im Cookie-Plugin. Das Argument ist der Zeitpunkt, zu dem der Cookie abläuft. Sie geben dort einfach Ihren eigenen Wert weiter. Das SSL-Argument gibt an, ob das Cookie nur über SSL-Verbindungen gültig ist. In diesem Fall wird nur geprüft, ob auf die Seite über SSL zugegriffen wird, und das Sicherheitsflag im Cookie entsprechend gesetzt.
Bakual

2

Als ich das letzte Mal (März 2013) in diesem Bereich recherchiert habe, habe ich diese Lösung gefunden, die JInput nicht verwendet:

Ich habe überprüft, wie JFactory JSession aufruft, aber ich habe keine Möglichkeit gefunden, den Ablauf beim Speichern von Daten festzulegen.

Innerhalb eines System-Plugins mit der Methode onAfterRender()

    $cookie = session_get_cookie_params();

    $cookie['lifetime'] = DESIRED LIFETIME;

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

Der einzige Nachteil, den ich festgestellt habe, war, dass es jetzt zwei Cookies mit identischem Namen und Inhalt gibt. Ich habe keine Nebenwirkungen bemerkt.

Hoffe das hilft.

Quelle: Joomla! Allgemeine Entwicklung ›Legen Sie den Ablauf der Front-End-Benutzersitzung fest


2

Versuchen Sie Folgendes:

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

Schwerwiegender Fehler: Der Rückgabewert der Methode kann im Schreibkontext in /path/to/templates/template/html/com_entrusters/itemform/default.php in Zeile 28
user2097091

@ user2097091 - Ich habe versehentlich ein zusätzliches Semikolon hinzugefügt. Der Code wurde aktualisiert. Können Sie es jetzt noch einmal versuchen?
Lodder

Sie verwenden die Variable, $inputCookiedie Sie nicht definiert haben - sollte das nicht sein $cookie?
MrWhite

@ w3d - ahh ja mein schlechtes. Der Code wurde aktualisiert. Vielen Dank für den Hinweis
Lodder
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.