搜索
查看: 22306|回复: 19

inet.whttp 库实现多用户同时登录

    [复制链接]

33

主题

543

帖子

3304

积分

荣誉会员

Rank: 8Rank: 8

积分
3304
发表于 2011-10-15 15:11:07 | 显示全部楼层 |阅读模式
很多人在做多用户登录的时候碰到过一个问题,怎么样让多个用户同时登录并且互不影响。有人提出记录 Cookie,再用指定的 Cookie 提交。但是aardio中并不需要你掌握这些,甚至不用知道 Cookie 是什么东西。
aardio中有一个 inet.whttp 库,每个 inet.whttp 对象都是一个独立的会话,互不影响,很容易就能实现这样的效果。例如我创建了两个 inet.whttp 对象,并不会因为其中的一个登录了百度,另一个也受其影响地自动登录了。

下面给出一个简单的应用,其中用到两个不同的帐号登录到 115,待两个帐号都登录后,分别获取这两个帐号的信息,再登出。

import inet.whttp;
clsUser =
class {
   
ctor (username, password) {
        
this.username = username;
        
this.password = password;
        
        
this._whttp = ..inet.whttp();
    }
   
    login =
function () {
        
this._whttp.beginRequest("http://passport.115.com/?ac=login", "POST", "http://www.115.com/");
        
this._whttp.writeHeader("Content-Type: application/x-www-form-urlencoded");
        
this._whttp.disableRedirects();
        
var re, status = this._whttp.send(
            ..string.format(
               
"%s=%s&%s=%s&back=http%%3A%%2F%%2Fwww.115.com&goto=http%%3A%%2F%%2F115.com",
               
"login%5Baccount%5D", encode(this.username),
               
"login%5Bpasswd%5D", encode(this.password)
            )
        );
        
this._whttp.endRequest();
        
return status == 302;
    }
   
    logout =
function () {
        
this._whttp.beginRequest("http://passport.115.com/?ac=logout&goto=http%3A%2F%2F115.com");
        
this._whttp.send();
        
this._whttp.endRequest();
    }
   
    getInfo =
function () {
        
var str = this._whttp.get("http://my.115.com/");
        
var re = {};
        
if (str) {
            re.islogin = !!..string.match(str,
"is_login\:1");
            
if ( ! re.islogin) return re;
            
            re.userid = ..string.match(str,
"user_id\: ""(\d+)");
            re.username = ..string.match(str,
"user_name\: ""([^""]+)");
            re.email = ..string.match(str,
"email\: ""([^""]+)");
            re.isvip = !!..string.match(str,
"is_vip\:  Number('1')");
        }
        
return re;
    }
}

namespace clsUser {
    encode =
function (str) {
        
return ..inet.url.encode( ..string.fromto(str, 65001, 0) );
    }
}

io.open();

var passports = {
    { username =
"aardiotest"; password = "asd123" };
    { username =
"aautest2"; password = "asd123" };
    { username =
"Not_Existing"; password = "123123" };
};

var users = {};

// 遍历所有账户信息,登录所有用户
for (k, v in passports) {
   
var username, password = v["username"], v["password"];
   
   
var user = clsUser(username, password);
   
// 登录用户
    io.stdout.write("正在登录 " + username + "...");
    io.print( user.login() ?
"成功" : "失败" );
   
   
// 记录到 users 表中
    table.push(users, user);
}

// 遍历所有用户,显示信息,并且登出
for (i = 1; #users) {
   
var user = users[ i ];
   
   
// 显示用户信息
    var userInfo = user.getInfo();
   
if (userInfo.islogin) {
        io.print( userInfo[
"username"], table.tostring(userInfo) );
        
        
// 登出
        user.logout();
        io.print( userInfo[
"username"] + "已登出" );
    }
}

评分

参与人数 4专家分 +345 银币 +50 收起 理由
S.G + 10 浅显易懂!
qqmmcc + 100 + 40 很给力!
低调点 + 45 赞一个!
Jacen.He + 200

查看全部评分

回复

使用道具 举报

5

主题

13

帖子

83

积分

新手入门

积分
83
发表于 2011-10-15 17:49:42 | 显示全部楼层

{:3_59:}赞一个

赞一个
回复

使用道具 举报

16

主题

101

帖子

636

积分

三级会员

Rank: 4

积分
636
发表于 2011-10-15 18:17:21 | 显示全部楼层

太需要了~好哈哈

太需要了~好哈哈
回复

使用道具 举报

3

主题

57

帖子

1005

积分

四级会员

Rank: 6Rank: 6

积分
1005
发表于 2011-10-16 00:17:44 | 显示全部楼层

非常不错,感谢!

非常不错,感谢!
回复

使用道具 举报

20

主题

325

帖子

1945

积分

新手入门

积分
1945
发表于 2011-10-17 14:15:36 | 显示全部楼层

感谢分享,支持

感谢分享,支持
回复

使用道具 举报

57

主题

256

帖子

1431

积分

四级会员

Rank: 6Rank: 6

积分
1431
发表于 2011-10-18 09:06:06 | 显示全部楼层

lujjjh总是给出惊喜,呵呵

lujjjh总是给出惊喜,呵呵
回复

使用道具 举报

48

主题

593

帖子

3336

积分

五级会员

Rank: 8Rank: 8

积分
3336
发表于 2011-11-22 21:47:04 | 显示全部楼层

{:3_59:}呵呵 看起来很吃力

呵呵 看起来很吃力
回复

使用道具 举报

3

主题

11

帖子

66

积分

一级会员

Rank: 2

积分
66
发表于 2011-11-23 08:11:54 | 显示全部楼层

好,太好了

好,太好了
回复

使用道具 举报

17

主题

72

帖子

712

积分

培训班

积分
712
发表于 2012-1-14 15:02:39 | 显示全部楼层

请问: ..string.format( "%s=%s&%s=%s&back=http%%3A%%2F%%2Fwww.11

请问:
..string.format(
                "%s=%s&%s=%s&back=http%%3A%%2F%%2Fwww.115.com&goto=http%%3A%%2F%%2F115.com",
                "login%5Baccount%5D", encode(this.username),
                "login%5Bpasswd%5D", encode(this.password)
这个是怎么得到的??

点评

用抓包工具就可以了,或者可以分析网页中的表单  发表于 2012-2-19 15:01
回复

使用道具 举报

4

主题

150

帖子

861

积分

三级会员

Rank: 4

积分
861
发表于 2012-2-19 11:16:33 | 显示全部楼层

仰望中。。。。。

仰望中。。。。。
回复

使用道具 举报

48

主题

593

帖子

3336

积分

五级会员

Rank: 8Rank: 8

积分
3336
发表于 2012-7-29 01:18:27 | 显示全部楼层

再mark一次 明天再看一遍

再mark一次 明天再看一遍
回复

使用道具 举报

39

主题

195

帖子

1269

积分

四级会员

Rank: 6Rank: 6

积分
1269
发表于 2012-9-22 21:33:54 | 显示全部楼层

lujjjh,在么? 我的当前AATUO版本是2.3.2.057,我直接复制你的源码下载,并没有显示出用户信息以及相应的退出操作。 今天问了老大,wht

lujjjh,在么? 我的当前AATUO版本是2.3.2.057,我直接复制你的源码下载,并没有显示出用户信息以及相应的退出操作。

今天问了老大,whttp 是会话独立,但是不会保存cookie。 那么请问,115是不是仅仅判断session,而没有判断cookie呢?
回复

使用道具 举报

33

主题

543

帖子

3304

积分

荣誉会员

Rank: 8Rank: 8

积分
3304
 楼主| 发表于 2012-9-22 21:51:24 | 显示全部楼层

[quote][size=2][color=#999999]ninja911 发表于 2012-9-22 21:33[/color] [url=forum.ph

ninja911 发表于 2012-9-22 21:33
lujjjh,在么? 我的当前AATUO版本是2.3.2.057,我直接复制你的源码下载,并没有显示出用户信息以及相应的退 ...

115的接口已经变了,这份代码当然不能用了。不能保存Cookie实际上指的是,不会将持久Cookie保存到文件中,可以理解成所有Cookie都作为会话Cookie来对待。

至于Session,实际上是由Cookie延伸出来的一个东西,其本质还是会话Cookie,特别之处只是在于Session的内容是记录在服务端的,客户端Cookie中记录的只是一个标识符。
回复

使用道具 举报

27

主题

116

帖子

791

积分

三级会员

Rank: 4

积分
791
发表于 2012-12-11 16:10:06 | 显示全部楼层

这代码看着就是高级。。赏析悦目的。。 不过有个问题。我一直很疑惑的是。。 this._whttp = ..inet.whttp(); 这俩 “..”

这代码看着就是高级。。赏析悦目的。。
不过有个问题。我一直很疑惑的是。。
  this._whttp = ..inet.whttp();
这俩 “..” 的含义是什么。经常会看到的例如..io.print
..string.load
这跟
var whttp=inet.whttp()
有啥不同呢?或者说好处
回复

使用道具 举报

27

主题

116

帖子

791

积分

三级会员

Rank: 4

积分
791
发表于 2014-4-5 18:04:09 | 显示全部楼层

虽然现在已经会了。但是时隔这么就,再看一遍这么精简的代码。总是还有些其他收获。谢谢楼主

虽然现在已经会了。但是时隔这么就,再看一遍这么精简的代码。总是还有些其他收获。谢谢楼主
回复

使用道具 举报

0

主题

55

帖子

362

积分

二级会员

Rank: 3Rank: 3

积分
362
QQ
发表于 2014-4-29 10:02:04 来自手机 | 显示全部楼层

太好了

太好了
回复

使用道具 举报

0

主题

10

帖子

123

积分

一级会员

Rank: 2

积分
123
发表于 2014-6-18 19:31:54 | 显示全部楼层

好教材 谢谢!!

好教材 谢谢!!
回复

使用道具 举报

0

主题

2

帖子

26

积分

新手入门

Rank: 1

积分
26
发表于 2014-6-21 10:55:06 | 显示全部楼层

[quote][size=2][url=forum.php?mod=redirect&goto=findpost&pid=46976&ptid=3633][co

以利亚先生丶 发表于 2012-12-11 16:10
这代码看着就是高级。。赏析悦目的。。
不过有个问题。我一直很疑惑的是。。
  this._whttp = ..inet.wht ...

在命名空间内部访问全局命名空间,需要在前面加上 .. 来表示访问全局命名空间。
回复

使用道具 举报

0

主题

14

帖子

77

积分

一级会员

Rank: 2

积分
77
发表于 2014-6-21 16:35:54 | 显示全部楼层

学习了!!!!

学习了!!!!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

手机版|未经许可严禁引用或转载本站文章|站长邮箱|aardio.com|aardio官方社区 ( 皖ICP备09012014号 )

GMT+8, 2018-10-24 10:26 , Processed in 0.078125 second(s), 24 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表