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


8

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

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

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

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


JSessionはセッションを認識するためにCookieを必要としますが、それらは同じものではありません。
Valentin Despa 2014年

回答:


5

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


ありがとう。これを理解しようとしています。ドキュメントは、私のような初心者には不快に判読できません。設定されたCookieが私の場合に具体的にどのように適用されるかを教えていただけますか?ライフタイムの設定方法とsslリファレンスの目的
user2097091 2014年

この場合、$lifetimeはCookieプラグインのパラメーターから取得されます。引数は、Cookieが期限切れになる時間です。そこに自分の値を渡すだけです。SSL引数は、CookieがSSL接続でのみ有効かどうかを示します。この場合、SSLを使用してページにアクセスしているかどうかを確認し、それに応じてCookieにセキュアフラグを設定します。
バクーアル2014年

2

前回この領域について調査したとき(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

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

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

致命的なエラー:28行目の/path/to/templates/template/html/com_entrusters/itemform/default.phpの書き込みコンテキストでメソッドの戻り値を使用できない
user2097091

@ user2097091-誤って余分なセミコロンを追加しました。コードを更新しました。今すぐ再試行できますか?
Lodder 2014年

$inputCookie定義していない変数を使用しています-これはそうではありません$cookieか?
MrWhite 2014年

@ w3d-ああ、はい、私の悪い。コードを更新しました。ご指摘いただきありがとうございます
Lodder 2014年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.