管理用户网站
用户账户网址:http://accounts.com
用户登录网址:http://accounts.com/login
用户等处网址:http://accounts.com/logout
应用网站
应用1:http://app1.com
应用2:http://app2.com
实现场景
登录 应用1,跳转到 http://accounts.com/login
进行登录
登录成功跳转 回应用1,地址后面会带个token,例如:http://app1.com/callback?token=xxxx 来验证登录
浏览了 应用1 后,用户进入 应用2 (用户可能会自己输入 app2.com 的地址访问 应用2)
此时 应用2 通过“某种方式”来判断之前 应用1 的登录与否,来设置当前用户是否登录
问题是如何实现场景中的 第4条?
我现在想到的是:
同步登录:像 discuz 那样,在登录一个应用时对其它应用进行同步登录,缺点是登录后最好是等个几秒在跳转使其它应用能够有足够时间写下 cookie,但是我不喜欢“要等几秒”的方式
使用 jsonp:虽然知道怎么用 jsonp 进行跨域请求,但是实现起来有些困难,而且处理不好就有安全问题
不知各位有什么好的方法???
----------------------- 华丽的分割线 ---------------------------
下午花了点时间分别研究了一下两组网站的登录方式:
google.com 和 youtube.com
taobao.com 和 etao.com
一、 google.com 和 youtube.com
情况一:都未登录,但是浏览过 youtube
登录 google.com 通过 https://accounts.google.com/ServiceLoginAuth
验证用户名密码
通过验证后跳转到 https://accounts.google.com/CheckCookie
检查是否有浏览过其它应用,比如说 youtube,这时就再次跳转到 https://accounts.youtube.com/accounts/SetSID
进行登录
最后再跳回 google.com 的首页
情况二:已登录 google.com,但未浏览过 youtube 也并未登录
由于登录了 google.com 所以我直接从地址栏里输入地址进行第一次访问 youtube
进入 youtube 首页显示的是我需要登录,故点击登录
依然跳转到 https://accounts.google.com/ServiceLoginAuth,但是不用任何输入直接跳回 yutube 首页
二、 taobao.com 和 etao.com
不管我有没有登录 taobao.com,我进入 etao.com 首页,首先会检查 cookie 是否登录
登录则 etao.com 首页显示登录状态
未登录则跳转到 http://jump.taobao.com/jump?target=http%3A%2F%2Fwww.etao.com%2F%3Ftbpm%3Dt
来检查在 taobao.com 是否有登录
登录则跳回 http://pass.etao.com/add?...
进行登录后在跳回首页,登录状态为登录
未登录则依然跳回首页,登录状态为未登录
现在基本知道怎么去做了,或者有其它更好方法的?说出来大家讨论一下……
我知道的有下面三种方法:
下面是详细:
<script type="text/javascript" src="http://app2/api/uc.php?time=132
4695020&code=f97bp%2FyiCrfFF%2B4lIndT1k3PoVk5%2BmVvNJMYiBzq7ssWE8FS
smj7T3jujWyDpKpT2t8vO7o5M19FlzvNdihXMDWqvyoko9C3lkpG%2BQX57zL112gb
GH%2FPwS9YD9A3%2BQVKNFSDzriFOqq9IFWJx6q4x%2Fk%2FMAltJygTiwRZ"
reload="1"></script>
<script type="text/javascript" src="http://app3/api/uc.php?time=1324
695020&code=2b55qIaEphMxdvEYZJok8GEoDW%2BctvZeWS84LvaH8MHf8AzrRXiLD
ZFIvS4cmUkXAGGeDnSVQ9rsu62iDnSAUSTEdSH2%2Bup5xZFvtgl9KRMEcOLLySih2w
vNL%2BSjRQgqErT5kEK0878zxlhRQn0ypgxXgmoCY3zE87sy" reload="1"></script>
注意的是, uc.php 需要 p3p header
header('P3P: CP="CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"');
<script type="text/javascript" reload="1">window.location.href=\'app1.com
/loginAuth.phpcode=ctvZeWS84LvaH8MHf8AzrRXiLDZFIvS4cmUkXAGGeDnSVQ9rsu62i
DnSAUSTEdSH2%2Bup5xZFvtgl9KRMEcOLLySih2wvNL%2BSjRQgqErT5kEK0878zxlhRQn0yp
gxXgmoCY3zE87s'\';</script>
坏处是 - 在用户看起来, 页面会有好一会儿的白屏! 不适合多个应用.
3 . Google 的方法, 坏处是用户得主动的点击登录按钮, 没法做到无缝的同步登录, 好处是适合多个应用;
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。