【转】 Ucenter同步登录原理解析

应用中调用函数us_user_synlogin并输出

echo uc_user_synlogin($uid);

解析:

1. 该函数位于client.PHP

2. 作用实质上是调用ucenter user模块的onsynlogin动作(该动作位于ucenter/control/user.php中)

onsynlogin首先会根据uc_user_synlogin传过来的uid获取用户的数据,然后获取当前所有允许异步登录的应用的配置信息

最终将生成几个<script src="app_uc_php_url?param"></script>这样的代码返回给uc_user_synlogin

app_uc_php_url:每个应用中的uc.php的地址

param:使用应用的authkey作为密钥加密过的用户信息以及将要调用的位于uc.php中的syslogin动作名

3. 这些script标签会作为uc_user_synlogin的返回值返回然后被输出

4. 输出时script标签的src将会被执行,即uc.php中的syslogin动作会执行(注意:每个应用中的uc.php的syslogin此时都将依次被执行,因为每个应用都有对应的script标签输出)

5. 每个应用的syslogin动作获得参数都是一致的,统一都为用户信息,但对这些信息的处理是可以不一致的,比如a应用可以将用户的ID和密码使用自身的authkey当做密钥加密后存储到cookie,而b应用则可以选择将用户的ID和用户名存储到cookie

6. 因为每个应用存储到cookie中的信息可能不同,且使用了自身的authkey加密,所以只有应用自身可以解码这段数据,其他应用即使可以获取这段数据也是无法解码的

7. 所以要实现账号在a应用登录后,在b账号也可以同步登录,那么b应用就应该首先获取自身uc.php的synlogin被调用后生成的cookie信息,然后使用自身的authkey解码,取出存储的信息,放到当前应用的session中,表示该用户已经登录.....

done

from:http://blog.csdn.net/w6611415/article/details/8933010

原文地址:https://www.cnblogs.com/xuan52rock/p/5687349.html