Cách thích hợp để đặt cookie liên tục trong Joomla 3.x


8

Tôi muốn đặt cookie "đích" cho tất cả người dùng trên trang web của mình để phục vụ nội dung phù hợp. Cookie cần duy trì trong quá trình đăng nhập / đăng xuất để nó xuất hiện Tôi không thể sử dụng jSession, đã bị xóa khi đăng nhập / đăng xuất.

Tôi có thể đạt được điều này theo cách cũ

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

... nhưng tôi chắc chắn rằng Joomla có một cách tốt hơn để ẩn đi đâu đó. PS - tài liệu về điều này thực tế không tồn tại theo như tôi có thể tìm thấy.


JSession cần một cookie để nhận ra một phiên, nhưng chúng không giống nhau.
Valentin Despa

Câu trả lời:


5

Bạn có thể muốn xem qua plugin xác thực cookie. Nó thiết lập và đọc một cookie liên tục.

Nó được tìm thấy ở đây: https://github.com/j Joomla / j Joomla-cms/tree/staging/plugins/authentication/cookie

Để đọc cookie, bạn có thể sử dụng

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

Để đặt cookie, bạn sử dụng

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

Một số tài liệu có thể được tìm thấy trên trang API: http : //api.j Joomla.org/cms-3/groupes/JInputCookie.html


Cảm ơn. cố gắng để hiểu điều này Các tài liệu này là không thể mã hóa cho người mới như tôi. Bạn có thể chỉ cho tôi cách đặt cookie áp dụng cụ thể trong trường hợp của tôi không? Làm cách nào để đặt thời gian tồn tại và tham chiếu ssl để làm gì?
user2097091

Trong trường hợp này, $lifetimeđến từ một tham số trong plugin cookie. Đối số là thời gian cookie sẽ hết hạn. Bạn chỉ cần vượt qua giá trị của riêng bạn ở đó. Đối số SSL cho biết nếu cookie sẽ chỉ hợp lệ trên các kết nối SSL. Trong trường hợp này, nó chỉ nhìn nếu trang được truy cập bằng SSL và đặt cờ bảo mật trong cookie tương ứng.
Bakual

2

Lần trước tôi đã thực hiện một số nghiên cứu về lĩnh vực này (tháng 3 năm 2013), tôi đã tìm thấy giải pháp này, hiện không sử dụng JInput:

Tôi đã kiểm tra cách JFactory gọi JSession nhưng tôi chưa tìm được cách đặt hết hạn khi lưu trữ dữ liệu.

Bên trong một plugin hệ thống, sử dụng phương thức onAfterRender()

    $cookie = session_get_cookie_params();

    $cookie['lifetime'] = DESIRED LIFETIME;

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

Điểm rút lui duy nhất tôi tìm thấy là bây giờ có hai cookie với tên và nội dung giống hệt nhau. Tôi không nhận thấy bất kỳ tác dụng phụ.

Hi vọng điêu nay co ich.

Nguồn: Joomla! Phát triển chung Thiết lập hết hạn phiên người dùng phía trước


2

Hãy thử sử dụng một cái gì đó như sau:

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

Lỗi nghiêm trọng: Không thể sử dụng giá trị trả về của phương thức trong ngữ cảnh ghi trong /path
to/temsheet/template/html/com_entr cluster/itemform/default.php

@ user2097091 - Tôi vô tình thêm một dấu chấm phẩy. Cập nhật mã. Bạn có thể thử lại bây giờ không?
Lodder

Bạn đang sử dụng biến $inputCookiemà bạn chưa xác định - không nên như $cookievậy?
MrWhite

@ w3d - ahh vâng, xấu của tôi. Cập nhật mã. Cảm ơn bạn đã chỉ ra điều đó
Lodder
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.