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

8

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 hal ini praktis tidak ada sejauh yang saya dapat temukan.

pengguna2097091
sumber
JSession membutuhkan cookie untuk mengenali sesi, tetapi itu bukan hal yang sama.
Valentin Despa

Jawaban:

5

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

Bakual
sumber
Terima kasih. mencoba memahami ini. Dokumentasinya tidak bisa dipahami oleh para pemula seperti saya. Bisakah Anda menunjukkan kepada saya bagaimana cookie yang ditetapkan berlaku khusus untuk kasus saya? bagaimana cara mengatur seumur hidup dan untuk apa ssl referensi?
user2097091
Dalam hal ini, $lifetimeberasal dari parameter di plugin cookie. Argumennya adalah saat cookie akan kedaluwarsa. Anda cukup memberikan nilai Anda sendiri di sana. Argumen SSL mengatakan jika cookie hanya akan valid melalui koneksi SSL. Dalam hal ini hanya terlihat jika halaman diakses menggunakan SSL dan menetapkan bendera aman di cookie yang sesuai.
Bakual
2

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 tapi 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 undian 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 ujung depan

Valentin Despa
sumber
2

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);
Lodder
sumber
Kesalahan fatal: Tidak dapat menggunakan nilai metode pengembalian dalam konteks tulis di /path/to/templates/template/html/com_entrusters/itemform/default.php pada baris 28
user2097091
@ user2097091 - Saya tidak sengaja menambahkan titik koma tambahan. Diperbarui kodenya. Bisakah kamu coba lagi sekarang?
Lodder
Anda menggunakan variabel $inputCookieyang belum Anda tetapkan - bukankah ini seharusnya $cookie?
MrWhite
@ w3d - ahh ya buruk saya. Diperbarui kodenya. Terima kasih telah menunjukkannya
Lodder