function authcache_fix_cookies in Authenticated User Page Caching (Authcache) 7.2
Add and remove cookies to the browser session as required.
See also
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']);
}
}
}
}