[转载]从cookie中读取uin需要注意的问题 – tenfyguo的技术专栏 – 博客频道 – CSDN.NET

[转载]从cookie中读取uin需要注意的问题 - tenfyguo的技术专栏 - 博客频道 - CSDN.NET.

问题的产生:

用户登录站点后,系统会在cookie植入对应的uin,其值的形式是oxxxxxxxxxx,xxx是对应的qq号码,如果不满足10位,则前面补充0,那么前端是可以通过js从cookie读取对应的qq号码的。

 

之前的读取方法:
[js]
/*
* 获取uin
*/
function getUin() {
var uin = QQVIP.cookie.get("uin");
if(uin == null || uin =='' || uin.length < 7) {
return '';
}

try {
uin = QQVIP.string.trim(uin.substr(2));
return uin;
}catch(e){
return '';
}
};
[/js]
很明显,该方法是从uin的第二位开始读取认为是qq号码,对9位号码,该API是ok的,如uin=o0123456789,则可以读取出对应的uin,

但对于22亿的10位号码,则明显将会被截断。

那么新的解决方法是什么?
[js]
/*
* 获取uin
*/
function getUin() {
var uin = QQVIP.cookie.get("uin");
if(uin == null || uin =='' || uin.length < 7) {
return '';
}

try {

//注意,该方法是从cookie中读取qq号码,对于少于10位的qq号码,
//前面是补0,对于10位的号码,则前面没有补0,使得oxxxx,其中xxx保
//留10位,所以统一从第二位读取qq号码是有问题的,正确的
//是:parseInt(QQVIP.string.trim(uin.substr(1)),10);
//注意调用parseInt函数,第二个参数必须输入10,以表示是按照10进制
//进行转换,否则以0开始的数字串会被认为是按八进制进行转换。
uin = parseInt(QQVIP.string.trim(uin.substr(1)),10);
return uin;

}catch(e){
return '';
}
};
[/js]