2013-02-01 92 views
0

我有一個外部非Drupal網站members.example.com,如果觀衆成員在該網站上登錄,它會設置一個cookie。它設置了一個對Drupal站點可見的cookie:Drupal 7 Cache Busting

$ _COOKIE ['name'] ='John Smith';

我想要認識到,members.example.com登錄用戶可以訪問Drupal站點www.example.com上的高級內容。我也想在網站的眉毛部分按名稱登錄會員。

問題是,在登錄非Drupal站點members.example.com並返回到Drupal站點www.example.com後,Drupal仍然緩存了很多內容,並且無法識別用戶現在已經設置了$ _COOKIE ['name']。

我:

坐落在settings.php配置Cookie域爲 'example.com'

試圖胸圍匿名的Drupal用戶誰也有這樣的cookie緩存:

/** 
    * Implements hook_init() 
    */ 
function caplogin_init() { 

    // Check for cookie if it's set to 'loggedout': 
    if (isset($_COOKIE['name'])) { 
    if (strpos($_COOKIE['name'],'loggedout') !== FALSE) { 
     // Log them out on the www site too: 
     setcookie('name', '', 1, '/', '.example.com'); 
     global $user; 
     if ($user->uid > 0) { 
     user_logout(); 
     } 
     $reason = 'Members server logout.'; 
     _caplogin_no_cache($reason); 
     drupal_set_message(t('You have been logged out of the site. Thanks for visiting!')); 
    } 
    else { 
     $reason = 'Member logged in internal server.'; 
     _caplogin_no_cache($reason); 
    } 
    } 
} 

和...

function _caplogin_no_cache($reason) { 
    if (!$reason) { 
     $reason = 'no-cache called by site functionality.'; 
    } 
    drupal_add_http_header('X-DRCC-No-Cache-Reason', $reason); 
    drupal_add_http_header('Pragma', 'no-cache'); 
    drupal_add_http_header('Last-Modified', gmdate('D, d M Y H:i:s') . ' GMT'); 
    drupal_add_http_header('Cache-Control', 'no-store, no-cache, must-revalidate, pre-check=0, post-check=0, max-age=0'); 
    drupal_add_http_header('Expires', 'Sat, 02 Jan 1971 00:00:00 GMT'); 
} 

我也安裝傑韋利模塊(用於TESTI ng)檢查ON複選框,以在每次頁面加載時重建主題緩存。沒有運氣。

如果添加一個僞造的查詢字符串,它會破壞緩存,例如, http://www.example.com/?sdjaSDH

但客戶端需要Drupal認識到用戶已登錄外部members.example.com站點的功能。

我還能試試嗎?

回答

1

做到這一點

$GLOBALS['conf']['cache'] = FALSE; 

幫助?

您可能需要將此代碼添加到hook_boot()或hook_init()中,並使用您所需的某些開關。