Пример #1
0
function MAX_cookieClientCookieFlush()
{
    $conf = $GLOBALS['_MAX']['CONF'];
    $domain = !empty($conf['cookie']['domain']) ? $conf['cookie']['domain'] : null;
    MAX_cookieSendP3PHeaders();
    if (!empty($GLOBALS['_MAX']['COOKIE']['CACHE'])) {
        reset($GLOBALS['_MAX']['COOKIE']['CACHE']);
        while (list($name, $v) = each($GLOBALS['_MAX']['COOKIE']['CACHE'])) {
            list($value, $expire) = $v;
            if ($name == $conf['var']['viewerId']) {
                MAX_cookieClientCookieSet($name, $value, $expire, '/', !empty($conf['cookie']['viewerIdDomain']) ? $conf['cookie']['viewerIdDomain'] : $domain);
            } else {
                MAX_cookieSet($name, $value, $expire, '/', $domain);
            }
        }
        $GLOBALS['_MAX']['COOKIE']['CACHE'] = array();
    }
    $cookieNames = $GLOBALS['_MAX']['COOKIE']['LIMITATIONS']['arrCappingCookieNames'];
    if (!is_array($cookieNames)) {
        return;
    }
    $maxCookieSize = !empty($conf['cookie']['maxCookieSize']) ? $conf['cookie']['maxCookieSize'] : 2048;
    foreach ($cookieNames as $cookieName) {
        if (empty($_COOKIE["_{$cookieName}"])) {
            continue;
        }
        switch ($cookieName) {
            case $conf['var']['blockAd']:
            case $conf['var']['blockCampaign']:
            case $conf['var']['blockZone']:
                $expire = _getTimeThirtyDaysFromNow();
                break;
            case $conf['var']['lastClick']:
            case $conf['var']['lastView']:
            case $conf['var']['capAd']:
            case $conf['var']['capCampaign']:
            case $conf['var']['capZone']:
                $expire = _getTimeYearFromNow();
                break;
            case $conf['var']['sessionCapCampaign']:
            case $conf['var']['sessionCapAd']:
            case $conf['var']['sessionCapZone']:
                $expire = 0;
                break;
        }
        if (!empty($_COOKIE[$cookieName]) && is_array($_COOKIE[$cookieName])) {
            $data = array();
            foreach ($_COOKIE[$cookieName] as $adId => $value) {
                $data[] = "{$adId}.{$value}";
            }
            while (strlen(implode('_', $data)) > $maxCookieSize) {
                $data = array_slice($data, 1);
            }
            MAX_cookieSet($cookieName, implode('_', $data), $expire, '/', $domain);
        }
    }
}
Пример #2
0
function MAX_cookieClientCookieFlush()
{
    $conf = $GLOBALS['_MAX']['CONF'];
    MAX_cookieSendP3PHeaders();
    if (!empty($GLOBALS['_MAX']['COOKIE']['CACHE'])) {
        // Set cookies
        reset($GLOBALS['_MAX']['COOKIE']['CACHE']);
        while (list($name, $v) = each($GLOBALS['_MAX']['COOKIE']['CACHE'])) {
            list($value, $expire) = $v;
            // Treat the viewerId cookie differently, (always set in client)
            if ($name == $conf['var']['viewerId']) {
                MAX_cookieClientCookieSet($name, $value, $expire, '/', !empty($conf['cookie']['domain']) ? $conf['cookie']['domain'] : null);
            } else {
                MAX_cookieSet($name, $value, $expire, '/', !empty($conf['cookie']['domain']) ? $conf['cookie']['domain'] : null);
            }
        }
        // Clear cache
        $GLOBALS['_MAX']['COOKIE']['CACHE'] = array();
    }
    // Compact all individual cookies into packed except for any cookies for the current bannerid
    // We only need to set these packed cookies if new capping data has been merged
    $cookieNames = $GLOBALS['_MAX']['COOKIE']['LIMITATIONS']['arrCappingCookieNames'];
    if (!is_array($cookieNames)) {
        return;
    }
    // For each type of cookie, repack if necessary
    foreach ($cookieNames as $cookieName) {
        // We only need to write out the compacted cookie if a new item is to be inserted (or updated)
        if (empty($_COOKIE["_{$cookieName}"])) {
            continue;
        }
        switch ($cookieName) {
            case $conf['var']['blockAd']:
            case $conf['var']['blockCampaign']:
            case $conf['var']['blockZone']:
                $expire = _getTimeThirtyDaysFromNow();
                break;
            case $conf['var']['capAd']:
            case $conf['var']['capCampaign']:
            case $conf['var']['capZone']:
                $expire = _getTimeYearFromNow();
                break;
            case $conf['var']['sessionCapCampaign']:
            case $conf['var']['sessionCapAd']:
            case $conf['var']['sessionCapZone']:
                $expire = 0;
                break;
        }
        if (!empty($_COOKIE[$cookieName]) && is_array($_COOKIE[$cookieName])) {
            $data = array();
            foreach ($_COOKIE[$cookieName] as $adId => $value) {
                $data[] = "{$adId}.{$value}";
            }
            // RFC says that maximum cookie data length is 4096 bytes
            // So we are assuming that 2048 will be valid in most browsers
            // Discard oldest data until we are under the limit
            while (strlen(implode('_', $data)) > 2048) {
                $data = array_slice($data, 1);
            }
            MAX_cookieSet($cookieName, implode('_', $data), $expire, '/', !empty($conf['cookie']['domain']) ? $conf['cookie']['domain'] : null);
        }
    }
}