it-swarm-id.com

Apa cara yang tepat untuk mengatur cookie tetap di Joomla 3.x

Saya ingin menetapkan cookie "tujuan" untuk semua pengguna di situs saya, untuk menyajikan konten yang disesuaikan. Cookie harus tetap ada di seluruh login/logout sehingga sepertinya saya tidak bisa menggunakan jSession, yang dihapus pada login/logout.

Saya bisa semacam mencapai ini dengan cara kuno

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

... tapi saya yakin joomla memiliki cara yang lebih baik disembunyikan di suatu tempat. PS - dokumentasi tentang ini praktis tidak ada sejauh yang saya dapat temukan.

8
user2097091

Anda mungkin ingin melihat pada plugin autentikasi cookie. Ini mengatur dan membaca cookie yang persisten.

Itu ditemukan di sini: https://github.com/joomla/joomla-cms/tree/staging/plugins/authentication/cookie

Untuk membaca cookie, Anda dapat menggunakan

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

Untuk mengatur cookie, Anda gunakan

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

Beberapa dokumentasi dapat ditemukan di halaman API: http://api.joomla.org/cms-3/classes/JInputCookie.html

5
Bakual

Terakhir kali saya melakukan riset di bidang ini (Maret 2013), saya menemukan solusi ini, yang tidak menggunakan JInput:

Saya telah memeriksa bagaimana JFactory memanggil JSession tetapi saya belum menemukan cara untuk mengatur kedaluwarsa saat menyimpan data.

Di dalam plugin sistem, menggunakan metode onAfterRender()

    $cookie = session_get_cookie_params();

    $cookie['lifetime'] = DESIRED LIFETIME;

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

Satu-satunya penarikan kembali yang saya temukan adalah sekarang ada dua cookie dengan nama dan konten yang identik. Saya belum melihat adanya efek samping.

Semoga ini membantu.

Sumber: Joomla! Pengembangan Umum ›Atur kedaluwarsa sesi pengguna front-end

2
Valentin Despa

Coba gunakan sesuatu seperti berikut ini:

$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