学习一下搜狐通行证(qyb大作)
来源:互联网 发布:手机代理设置软件 编辑:程序博客网 时间:2024/05/16 19:08
搜狐通行证是伟大的qyb同学加入搜狐后的第一个大作,是成名之作,前几天吃饭还谈起此事,最近几天终于有时间研究一下,今天说一下我从外部学习到的通行证的东西。
从任意的sohu新闻页面的源代码中可以看到这么一段js
<scrīpt src="http://www.sohu.com/passport/pp18030_5.js"></scrīpt>
<scrīpt src="http://www.sohu.com/passport/pn18030_5.js"></scrīpt>
<scrīpt>
PassportSC.appid = 9997;
PassportSC.max_line_length = 40;
PassportSC.isSetFocus = false;
PassportSC.drawPassport(document.getElementById("newscard"));
</scrīpt>
pp18030_5.js是PassportSC这个对象的基本定义,有很多的参数和方法。
pn18030_5.js是每个产品线定制的passport登录框、等待认证框、出错提示框的代码。
之后的代码则是给PassportSC的属性赋值。
appid是分给每个业务线的编号。
isSetFocus是否给登录框焦点,我曾经向qyb同学提出看新闻时登录框有了焦点,导致我无法用空格翻页。
drawPassport方法就是修改newscard这个div内的代码。
- 页面调用PassportSC.drawPassport()方法后,该对象从cookie(ppinfo或者passport)中获取登录信息,如果有登录cookie,跳到第8步
- draw登录框,表单的onSubmit事件是PassportSC.doLogin
- 点登录后,PassportSC将用户email和密码等通过创建的scrīpt标签调用passport服务器的登录认证程序
原本传递的密码是明文的,被我发现了,现在改成了md5过的。
- PassportSC将登录框改为登录等待框
- 登录认证程序为login_status赋值,登录成功返回值是success,错误会返回errorN
- PassportSC分析login_status,打印错误页或者成功的面板
- 登录成功后还会调用crossdomain_all.jsp,为所有的域名种下cookie
- 方法parsePassportCookie将passport的值解析,获取登录者的信息,获得userid后打印登录成功信息
- 各个业务线根据自己的需要调用方法drawPPContInfo修改通行证面板中的部分信息
- 退出登录部分跟登录流程基本相似
passport种下的cookie的格式是
1|登录时的时间戳|0|登录者的信息|未知的md5|未知信息;
将登录者的信息做base64解码和utf8到utf16的转换后,得到内容的格式是
|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的对象看的一览无余。
作者: 肖建彬 | 可以转载, 转载时务必以超链接形式标明文章原始出处和作者信息及版权声明
网址:http://www.xiaojb.com/archives/it/sohu-passport-code.shtml
- 学习一下搜狐通行证(qyb大作)
- 通行证
- Linux驱动学习----搜罗前辈大作
- 学习一下学习一下学习一下学习一下学习一下
- 试了一下搜狐云景对ruby的支持
- 网络通行证
- 港澳通行证
- 港澳通行证
- 搜狐邮件中心 学习 基础库prototype
- 学习一下
- 学习一下
- 学习一下
- 开篇大作
- 开篇大作
- 世界大作
- 中文FOXBASE命令集-学习公社-搜狐教育
- 金山毒霸2008通行证
- 网易通行证分析
- Net2.0如何实现伪静态技术,或者地址重写?
- 利用timestamp避免更新冲突
- ORACLE 优化汇总 (上)
- 实现GPRS数据传输新方法的研究
- 基于JDBC的数据库连接池技术研究与设计
- 学习一下搜狐通行证(qyb大作)
- 嵌入式系统开发学习
- c#中Split等分割字符串的几种方法(转)
- 修改Zend引擎实现PHP源码加密的原理及实践
- javascript-----页面对象
- 两个很常用的存储过程
- GridView导出数据到Excel
- 中国最牛十大美女CEO
- P2P的工作原理