Каков правильный способ установки постоянного cookie в Joomla 3.x

Я хотел бы установить cookie «destination» для всех пользователей моего сайта, чтобы обслуживать индивидуальный контент. Файл cookie должен сохраняться во время входа /выхода из системы, поэтому я не могу использовать jSession, который очищается при входе /выходе из системы.

Я могу сделать это старомодным способом.

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

... но я уверен, что joomla лучше спрятался где-то. PS - документация по этому вопросу практически не существует, насколько я могу найти.

8 голосов | спросил user2097091 11 Maypm14 2014, 19:22:36

3 ответа


5

Возможно, вам захочется взглянуть на плагин аутентификации cookie. Он устанавливает и читает постоянный файл cookie.

Он находится здесь: https://github.com/joomla/joomla-cms /дерево /постановка /плагинов /аутентификации /печенье

Чтобы прочитать файл cookie, вы можете использовать

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

Чтобы установить файл cookie, вы используете

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

Некоторые документы можно найти на странице API: http://api.joomla.org/cms -3 /классы /JInputCookie.html

ответил Bakual 11 Maypm14 2014, 19:41:45
2

В прошлый раз, когда я провел некоторое исследование в этой области (март 2013 года), я нашел это решение, которое не использует JInput:

Я проверил, как JFactory вызывает JSession, но я не нашел способ установить срок годности при хранении данных.

Внутри системного плагина, используя метод onAfterRender()

    $cookie = session_get_cookie_params();

    $cookie['lifetime'] = DESIRED LIFETIME;

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

Единственное, что я нашел, было то, что теперь есть два файла cookie с одинаковым именем и контентом. Я не заметил никаких побочных эффектов.

Надеюсь, что это поможет.

Источник:

ответил Valentin Despa 11 Maypm14 2014, 22:54:18
2

Попробуйте использовать что-то вроде следующего:

$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);
ответил Lodder 11 Maypm14 2014, 19:40:10

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132