QQ邮箱提示快速登录是如何实现的

clt 发布于 2012/03/30 20:09
阅读 7K+
收藏 4

前两天换了QQ2012,今天发现登录QQ后(登录了两个Q),再在浏览器中输入地址 mail.qq.com 登邮箱的时候,提示“检测到您已登录QQ账号”,并给出了已经登录的QQ账号列表,可以选择一个账号快速登录(不再需要密码)。

我用的 ff 浏览器。chrome 试了一下也可以通过。

没想明白这是怎么实现的,通过ip检测似乎不可靠, 浏览器里也没有发现有对应的插件,qq直接写cookie也不可靠,浏览器也没有给出js执行客户端代码的提示。

有知道的没?

加载中
2
牛牛牛牛
牛牛牛牛

之前是不支持chrome浏览器的,是不兼容导致的。

用firebug提取mail.qq.com中的iframe得到

http://xui.ptlogin2.qq.com/div/qlogin_div_t.html

关键JS (通过QQ自身控件获取QQ号码写入cookie,页面通过cookie登录)

<script src="https://xui.ptlogin2.qq.com/js/qlogin_div.js?v=1.2.38"></script>

 

关键JS:通过QQ自身控件获取QQ号码

getQQnum:function(){

if(!window.ActiveXObject)

{return 0}

try{

var D=new ActiveXObject("SSOAxCtrlForPTLogin.SSOForPTLogin2");

var F=D.CreateTXSSOData();

D.InitSSOFPTCtrl(0,F);

var E=D.CreateTXSSOData();

var A=D.DoOperation(2,E);

var B=A.GetArray("PTALIST");

var C=B.GetSize();if(C>0){return C}}catch(G){return 0}return 0}

 

...
pt.cookie.set("ptui_qstatus",1,pt.domain,"/",1)
...
cookie:
名称:ptui_qstatus
路径:qq.com
生命周期:1分钟               

下面有个连接,有详细研究

http://www.hack50.com/qq/181/75188.html

1
郑雨涵
郑雨涵

我来猜下思路:

QQ客户端内置一个特定端口的小型HTTP SERVER,网页版QQ访问这个HTTP SERVER,返回特殊值来获取已经登录QQ账户信息。

 

3322
3322
qq没有使用这种方案,这种方案也有限制,就是跨域,如果2个domain不同,cookie没有办法共享
leetom
leetom
我很赞同,阿里旺旺是这么做的
0
Yisen
Yisen
为什么通过ip检测不可靠?
0
景愿
景愿

请求:ajax -> web服务器,web服务器->qq服务器

返回:qq服务器->web服务器-> ajax

最终ajax知道你qq登录信息

这条路唯一的难点就是如何保证你的web和你qq在同一台机器上

总体感觉1L靠谱

0
小耶果
小耶果
QQ客户端登陆成功会在腾讯服务器的账号数据库中写进在线的tag,任何QQ的web产品在登陆过程的后台程序中都会检测这些tag,然后...
0
clt
clt

引用来自“xiaojia2008”的答案

我来猜下思路:

QQ客户端内置一个特定端口的小型HTTP SERVER,网页版QQ访问这个HTTP SERVER,返回特殊值来获取已经登录QQ账户信息。

 

这个方案也不错
0
clt
clt

引用来自“牛牛牛牛”的答案

之前是不支持chrome浏览器的,是不兼容导致的。

用firebug提取mail.qq.com中的iframe得到

http://xui.ptlogin2.qq.com/div/qlogin_div_t.html

关键JS (通过QQ自身控件获取QQ号码写入cookie,页面通过cookie登录)

<script src="https://xui.ptlogin2.qq.com/js/qlogin_div.js?v=1.2.38"></script>

 

关键JS:通过QQ自身控件获取QQ号码

getQQnum:function(){

if(!window.ActiveXObject)

{return 0}

try{

var D=new ActiveXObject("SSOAxCtrlForPTLogin.SSOForPTLogin2");

var F=D.CreateTXSSOData();

D.InitSSOFPTCtrl(0,F);

var E=D.CreateTXSSOData();

var A=D.DoOperation(2,E);

var B=A.GetArray("PTALIST");

var C=B.GetSize();if(C>0){return C}}catch(G){return 0}return 0}

 

...
pt.cookie.set("ptui_qstatus",1,pt.domain,"/",1)
...
cookie:
名称:ptui_qstatus
路径:qq.com
生命周期:1分钟               

下面有个连接,有详细研究

http://www.hack50.com/qq/181/75188.html

看来还是走的cookie啊
0
clt
clt

引用来自“yisen”的答案

为什么通过ip检测不可靠?
ip 数据并不准确, 尤其是在代理、内网、多网卡等情况下
返回顶部
顶部