在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

Answers:


5

您可能想看看Cookie身份验证插件。它设置并读取持久性cookie。

在这里找到它:https : //github.com/joomla/joomla-cms/tree/staging/plugins/authentication/cookie

要读取Cookie,您可以使用

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

要设置Cookie,请使用

$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中设置安全标志。
巴库

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

我发现的唯一缺点是,现在有两个具有相同名称和内容的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 2014年

@ user2097091-我不小心添加了多余的分号。更新了代码。您现在可以再试一次吗?
罗德2014年

您正在使用$inputCookie尚未定义的变量-这不是$cookie吗?
怀特

@ w3d-啊,是的,我不好。更新了代码。感谢您指出了这一点
Lodder
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.