joomlajoomla2.5joomla3.0joomla3.1

How to use cookies from a component?


How can I use cookies in a Joomla component?

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

Can anybody describe how this works?


Solution

  • // 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 $expire value

    Notes

    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

    Non-string values

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

    Rererences