学习一下搜狐通行证(qyb大作)

来源:互联网 发布:手机代理设置软件 编辑:程序博客网 时间:2024/05/16 19:08



搜狐通行证是伟大的qyb同学加入搜狐后的第一个大作,是成名之作,前几天吃饭还谈起此事,最近几天终于有时间研究一下,今天说一下我从外部学习到的通行证的东西。

从任意的sohu新闻页面的源代码中可以看到这么一段js

<div id="newscard" style="margin-left:615px!important;margin-left:613px"></div>
Q GB^(Qbri!m29828<scrīpt src="http:
//www.sohu.com/passport/pp18030_5.js"></scrīpt>
U{b(}I(J)n29828<
scrīpt src="http://www.sohu.com/passport/pn18030_5.js"></scrīpt>PHPChina 开源社区门户o!SpK as0cxO
<scrīpt>PHPChina 开源社区门户Ll3I@$Mw'[3u ?
PassportSC.appid = 9997;
apTgG ^QvP29828PassportSC.max_line_length = 40; PHPChina 开源社区门户|3}(@ K*]�Vq
PassportSC.isSetFocus = false;PHPChina 开源社区门户L0r'kh J&B3~
PassportSC.drawPassport(document.getElementById("newscard")); PHPChina 开源社区门户hs7H*S5r-v
<
/scrīpt>

pp18030_5.js是PassportSC这个对象的基本定义,有很多的参数和方法

pn18030_5.js是每个产品线定制的passport登录框、等待认证框、出错提示框的代码。

之后的代码则是给PassportSC的属性赋值。
3p5?R/I~Dk!]29828appid是分给每个业务线的编号。PHPChina 开源社区门户!U GWlBuI@j/
isSetFocus是否给登录框焦点,我曾经向qyb同学提出看新闻时登录框有了焦点,导致我无法用空格翻页。PHPChina 开源社区门户Bp ~,db ^
drawPassport方法就是修改newscard这个div内的代码。

  1. 页面调用PassportSC.drawPassport()方法后,该对象从cookie(ppinfo或者passport)中获取登录信息,如果有登录cookie,跳到第8步
  2. draw登录框,表单的onSubmit事件是PassportSC.doLogin
  3. 点登录后,PassportSC将用户email和密码等通过创建的scrīpt标签调用passport服务器的登录认证程序

    原本传递的密码是明文的,被我发现了,现在改成了md5过的。

  4. PassportSC将登录框改为登录等待框
  5. 登录认证程序为login_status赋值,登录成功返回值是success,错误会返回errorN
  6. PassportSC分析login_status,打印错误页或者成功的面板
  7. 登录成功后还会调用crossdomain_all.jsp,为所有的域名种下cookie
  8. 方法parsePassportCookie将passport的值解析,获取登录者的信息,获得userid后打印登录成功信息
  9. 各个业务线根据自己的需要调用方法drawPPContInfo修改通行证面板中的部分信息
  10. 退出登录部分跟登录流程基本相似

passport种下的cookie的格式是

1|登录时的时间戳|0|登录者的信息|未知的md5|未知信息;

将登录者的信息做base64解码和utf8到utf16的转换后,得到内容的格式是

userid:20:11111111111@sohu.com|username:3:肖建彬|serviceuse:30:100111000100000000000000000000PHPChina 开源社区门户;/1S)a"l7NG(IA,aB
|newmail_num:1:0|ip:15:1.2.3.4|did:0:

utf8转码为utf16后,可以在任意字符集的页面显示,提高了兼容性。使用<scrīpt charset=”utf-8″> </scrīpt>的方法可以保证字符集正确,但是无法保证cookie中解析出来的中文也是正确的。

登录信息中包含了很多故事,userid就是passport的名字,username是真实姓名,serviceuse是该用户都使用了哪些服务,newmail_num是新邮件数目,ip是登录的ip地址,did不知道。

搜狐的新闻页面使用passport面板只从cookie中获取信息,不浪费服务器资源。

受益匪浅。

另:firebug真是个好东西,可以将js的对象看的一览无余。

作者: 肖建彬 | 可以转载, 转载时务必以超链接形式标明文章原始出处和作者信息及版权声明
B(h` M/p8p s�RCB A~29828网址:http://www.xiaojb.com/archives/it/sohu-passport-code.shtml

原创粉丝点击