0

Drupal 以外の外部 Web サイト members.example.com があり、オーディエンス メンバーがそのサイトにログインした場合に Cookie を設定します。以下の Drupal サイトに表示される Cookie を設定します。

$_COOKIE['name'] = 'ジョン・スミス';

members.example.com にログインしたユーザーが、www.example.com の Drupal サイトのプレミアム コンテンツにアクセスできることを確認したいと思います。また、ウェブサイトの眉セクションで、ログインしたメンバーの名前を大きくしたいと考えています。

問題は、Drupal 以外のサイト members.example.com にログインした後、Drupal サイト www.example.com に戻った後も、Drupal はまだ多くのものをキャッシュしており、ユーザーが現在持っていることを認識していないことです。 $_COOKIE['name'] セット。

私は持っている:

settings.php の Cookie ドメインを「example.com」に設定します。

これも Cookie を持っている匿名の Drupal ユーザーのキャッシュを破壊しようとしました:

 /**
  * 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');
 }

Develモジュールもインストールし、(テストのために)ページの読み込みごとにテーマキャッシュを再構築するためのチェックボックスをオンにしました。運がない。

偽のクエリ文字列を追加すると、キャッシュが無効になります。たとえば、http://www.example.com/?sdjaSDH

ただし、クライアントには、ユーザーが外部の members.example.com サイトにログインしたことを Drupal が認識する機能が必要です。

他に何を試すことができますか?

4

1 に答える 1

1

これを行います

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

ヘルプ ?

このコードを hook_boot() または hook_init() に追加して、必要に応じていくつかのスイッチを追加する必要がある場合があります。

于 2013-02-12T07:46:15.080 に答える