我有一个外部非 Drupal 网站 members.example.com,如果受众成员登录该网站,它会设置一个 cookie。它设置了一个对 Drupal 站点可见的 cookie,即:
$_COOKIE['name'] = '约翰·史密斯';
我想知道 members.example.com 登录用户可以访问 Drupal 站点 www.example.com 上的高级内容。我还想在网站的眉毛部分按名称显示已登录的会员。
问题是,在登录非 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 模块并(用于测试)选中了 ON 复选框,以便在每次页面加载时重建主题缓存。没运气。
如果您添加虚假查询字符串,它会破坏缓存,例如http://www.example.com/?sdjaSDH
但客户端需要 Drupal 识别用户已登录外部 members.example.com 站点的功能。
我还能尝试什么?