如何使用组件中的cookie?

Ank*_*wal 8 joomla joomla2.5 joomla3.0 joomla3.1

如何在Joomla组件中使用cookie?

setcookie( JUtility::getHash('JLOGIN_REMEMBER'), false, time() - 86400, '/' );
Run Code Online (Sandbox Code Playgroud)

谁能描述一下这是如何工作的?

pio*_*_cz 27

// Get input cookie object
$inputCookie  = JFactory::getApplication()->input->cookie;

// Get cookie data
$value        = $inputCookie->get($name = 'myCookie', $defaultValue = null);

// Check that cookie exists
$cookieExists = ($value !== null);

// Set cookie data
$inputCookie->set($name = 'myCookie', $value = '123', $expire = 0);

// Remove cookie
$inputCookie->set('myCookie', null, time() - 1);
Run Code Online (Sandbox Code Playgroud)

关于$expire价值的一些规则

  • 它是一个几秒钟的Unix tinestamp,就像返回值一样time().
  • $expire == 0:cookie生命周期是浏览器会话.
  • $expire < time():cookie正被删除(过期设置为过去).您可以通过将其值设置为null来删除cookie,但显然IE无法执行此操作.

笔记

请记住,应在发送标头之前设置cookie(通常在回显输出之前).

应正确转义Cookie密钥和值

非字符串值

序列化set(如json_encode($dataNode))时的值,请记住使用适当的过滤器以便稍后检索它.默认是cmd,除了aZ,0-9和jSON结构之外,几乎可以过滤掉任何东西.

// Get cookie data
$encodedString = $inputCookie->get('myCookie', null, $filter = 'string');

// Decode
$values = json_decode($encodedString);

// Encode and Set
$inputCookie->set('myCookie', json_encode($values));
Run Code Online (Sandbox Code Playgroud)

Rererences

  • 值不能是数组,joomla现在不支持subcookies (2认同)