Beispiel #1
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);
        }
    }
}
Beispiel #2
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);
        }
    }
}
 /**
  * Test that the P3P headers are generated correctly
  *
  */
 function test_MAX_cookieSendP3PHeaders()
 {
     $conf =& $GLOBALS['_MAX']['CONF'];
     // Test that nothing is set if the p3p policy setting is set to false
     $conf['p3p']['policies'] = false;
     unset($GLOBALS['_HEADERS']);
     MAX_cookieSendP3PHeaders();
     $this->assertNull($GLOBALS['_HEADERS']);
     // Test that the p3p header is set correctly if p3p policies is set
     $conf['p3p']['policies'] = true;
     $p3p = _generateP3PHeader();
     unset($GLOBALS['_HEADERS']);
     MAX_cookieSendP3PHeaders();
     $this->assertIsA($GLOBALS['_HEADERS'], 'array');
     $this->assertEqual($GLOBALS['_HEADERS'][0], "P3P: " . $p3p);
 }