web-dev-qa-db-ja.com

Joomla 3.xで永続的なCookieを設定する適切な方法は何ですか

カスタマイズされたコンテンツを提供するために、サイトのすべてのユーザーに「宛先」Cookieを設定したいと思います。 Cookieはログイン/ログアウト後も保持される必要があるため、ログイン/ログアウト時にクリアされるjSessionを使用できないようです。

私はこれを昔ながらの方法で達成することができます

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

...しかし、joomlaはどこかに隠されたより良い方法を持っていると確信しています。 PS-これに関するドキュメントは、私が知る限り、事実上存在しません。

8
user2097091

Cookie認証プラグインを確認してください。永続的なCookieを設定して読み取ります。

それはここにあります: https://github.com/joomla/joomla-cms/tree/staging/plugins/authentication/cookie

クッキーを読むには、

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

クッキーを設定するには、

$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/classes/JInputCookie.html

5
Bakual

前回この領域について調査したとき(2013年3月)、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);

私が見つけた唯一の逆引きは、同じ名前と内容の2つのCookieが存在することです。私は副作用に気づきませんでした。

お役に立てれば。

ソース: Joomla!全般的な開発›フロントエンドユーザーセッションの有効期限の設定

2
Valentin Despa

次のようなものを使用してみてください。

$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