首页 / 帖子
如何实现Drupal6与Drupal7的单点登录

单点登陆的场景比较多,我遇到的场景是:


两个系统一个是Drupal6一个是Drupal7。Drupal6是老站,因此为主,Drupal7是新站。


现在想达到的效果是同步登录,退出,同步注册。


两个站是在同一个顶级域名下的。


2个答案
赵高欣
发布于:2014-02-10 16:30

有一个问题就是,不知道是否在同一台服务器。

 

方法一:

个人的建议用SSO类似的登录,这样不管是否在同一服务器,都能实现。

 

 D6(登陆)--redirect->D7(实现登陆,注册cookie)--redirect-->D6

 

翻过来也可以。这样可以实现两边都登陆,有一个问题,就是如果没走登陆流程,直接进入D6站,这个时候,D6没有cookie,主动检查D7的cookie,如果也没有,就表示匿名用户,如果有,可以跳转到D7,让D7验证,验证通过导向D6的内部登陆页面,再注册一个D6的cookie,如果没有登录,也加一个cookie表示没有登录。

 

这种内部登陆链接可以用drupal的user hash方式实现。

 

不知道这个是不是正规的解决方案。

 

方法二:

另外一种比较讨巧的方法,用户登录的时候种一个cookie,顶级域名的,把用户的id信息或用户名,加密存储。

重写drupal的sess_read

<?php 
$uid = get_uid_from_cookie();
$user = get_user_by_uid();

 这样,两套系统可以用同样的算法,cookie也可以共享,实现登陆。

Amanda Song
发布于:2014-07-25 09:03

可参考以下模块来定制单点登录

Bakery Single Sign-On System             --  sso, 多站统一登录,官方使用模块

Session Share     --  https://www.drupal.org/sandbox/rogical/1903268