You are here

function authcache_fix_cookies in Authenticated User Page Caching (Authcache) 7.2

Add and remove cookies to the browser session as required.

See also

hook_authcache_cookie()

hook_authcache_cookie_alter()

Related topics

1 call to authcache_fix_cookies()
authcache_exit in ./authcache.module
Implements hook_exit().

File

./authcache.module, line 694
Authenticated User Page Caching (and anonymous users, too!)

Code

function authcache_fix_cookies($account = NULL) {
  global $user;
  if (!isset($account)) {
    $account = $user;
  }
  $cookies = module_invoke_all('authcache_cookie', $account) + authcache_add_cookie();
  drupal_alter('authcache_cookie', $cookies, $account);
  $default_params = array(
    'present' => FALSE,
    'value' => NULL,
    'lifetime' => authcache_key_lifetime(),
    'path' => ini_get('session.cookie_path'),
    'domain' => ini_get('session.cookie_domain'),
    'secure' => ini_get('session.cookie_secure') == '1',
    'httponly' => FALSE,
    'samesite' => NULL,
  );
  foreach ($cookies as $name => $params) {
    $params += $default_params;

    // PHP converts dots to underscores
    $cookiename = str_replace('.', '_', $name);
    $expires = NULL;
    $value = NULL;
    if ($params['present']) {

      // Fix cookie if it is not present in the users browser or the value does
      // not match our expectations.
      if (!isset($_COOKIE[$cookiename]) || $_COOKIE[$cookiename] != $params['value']) {
        $expires = $params['lifetime'] ? REQUEST_TIME + $params['lifetime'] : 0;
        $value = $params['value'];
      }
    }
    elseif (!$params['present'] && isset($_COOKIE[$cookiename])) {

      // Remove spare cookie.
      $expires = REQUEST_TIME - 86400;
      $value = "";
    }
    if (isset($expires) && isset($value)) {
      if (function_exists('drupal_setcookie')) {
        $options = $params;
        $options['expires'] = $expires;
        unset($options['present']);
        unset($options['value']);
        unset($options['lifetime']);
        drupal_setcookie($name, $value, $options);
      }
      else {
        $options = $params;
        setcookie($name, $value, $expires, $params['path'], $params['domain'], $params['secure'], $params['httponly']);
      }
    }
  }
}