8

如何在 Joomla 组件中使用 cookie?

setcookie( JUtility::getHash('JLOGIN_REMEMBER'), false, time() - 86400, '/' );

任何人都可以描述这是如何工作的吗?

4

1 回答 1

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

$expire关于价值的一些规则

  • 它以秒为单位的Unix tinestamptime() ,如.
  • $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));

参考文献

于 2013-04-26T07:15:05.943 回答