it-swarm.com.de

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

Ich möchte ein "Ziel" -Cookie für alle Benutzer auf meiner Website festlegen, um maßgeschneiderte Inhalte bereitzustellen. Das Cookie muss über Login/Logout bestehen bleiben, damit es so aussieht, als ob ich jSession nicht verwenden kann, was beim Login/Logout 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, dass Joomla irgendwo einen besseren Weg hat, sich zu verstecken. PS - die Dokumentation dazu ist meines Erachtens praktisch nicht vorhanden.

8
user2097091

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

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

Um ein Cookie zu lesen, 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

5
Bakual

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

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

In einem System-Plugin 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);

Die einzige Rückziehung, die ich fand, war, dass es jetzt zwei Cookies mit identischem Namen und Inhalt gibt. Ich habe keine Nebenwirkungen bemerkt.

Hoffe das hilft.

Source: Joomla! General Development ›Ablauf der Front-End-Benutzersitzung festlegen

2
Valentin Despa

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