it-swarm-vi.com

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

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 phải 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ể sắp xếp đạ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.

8
user2097091

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

5
Bakual

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 Bộ cài đặt hết hạn phiên người dùng trước

2
Valentin Despa

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