Cookies can be used to remember the state of the session, such as authentication, state of GUI controls and personalization through user preferences. They can also be inappropriately used to track the browsing history and to transfer malware.
Using cookies in Joomla extensions
// 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);
Some rules about
- its a Unix tinestamp in seconds, like return value of
$expire == 0: cookie lifetime is of browser session.
$expire < time(): cookie is being deleted (expire set to past). You could remove cookie by setting it's value to null, but apparently IE fails to do so.
Keep in mind that cookies should be set before headers are sent (usually before output is echoed).
Cookie key and value should be properly escaped
When serializing the value on set (like
json_encode($dataNode)), remember to use proper filter to retrieve it later on. Default is
cmd, which filters out pretty much anything but a-Z, 0-9 and cracks JSON structure.
// Get cookie data $encodedString = $inputCookie->get('myCookie', null, $filter = 'string'); // Decode $values = json_decode($encodedString); // Encode and Set $inputCookie->set('myCookie', json_encode($values));
- Joomla CMS github repository: JInputCookie::set (very well documented)
- php docs: php.net/setcookie (developer experiences)
- Wikipedia: HTTP Cookies (theory)