因为有需要就研究了一下sohu的登陆 ,一看吓一跳:
GET /sso/login.jsp?userid=xxx&password=e6aebe16e8fd0bee153f72d3c0ffb3b2&appid=1019&persistentcookie=0&s=1185037959140&b=1&w=1280&pwdtype=1 HTTP/1.1
Accept: */*
Referer: http://blog.sohu.com/
Accept-Language: zh-cn
UA-CPU: x86
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.2; WOW64; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30)
Host: passport.sohu.com
Connection: Keep-Alive
密码怎么变成了这样?
仔细分析了一下页面的js文件,不得不说sohu变态和聪明:
1、页面上明明有一个表单,但是真正给客户用的却是js中输出的表单,而且没有使用常规的post,使用了get方式验证登陆;
2、在js中使用了一个md5函数加密了密码,所以才会有上文那样的字符串,把md5放到了客户端,减少了服务器的运算量;
3、登陆成功后,通过ajax技术隐藏调用了sogou,17173等网站的一个页面,传递了一个值过去,实现了SSO,这样做的话当切换域名时就减少了用户访问集中的passport服务器(SSO);但是从某种角度来看这样做也有无意义的访问在里面,加重了服务器的负担,但是改善了用户的访问行为,一次登陆过程中有11次访问请求(包括跳转);
4、一个页面中的图片请求太多,但是访问速度确很快。什么都不说,心哇凉哇凉的。谁叫他有钱,就有好的服务器和带宽;