手机客户端和服务器端通信

  • Post author:
  • Post category:其他


手机客户端与服务器端的通信,不同于浏览器与服务器端的通信。浏览器和服务器端的通信依靠session去维持一个会话, 当这一切搬到手机上仿佛一切都失效了。

1.在上一家公司的时候公司同事曾经问过我这个问题, 我当时想的解决办法是通过将sessionID附加到网址后面,或者放到hearder头中,维持会话。

2.

或者干脆不维持会话,每次请求都通过签名认证,调用接口,拿数据。当然这样的效率肯定是最低的

3.到了新公司,看到google大牛推荐的一种方式。根据这种方式构建了一种类似于session的机制,一下主要是我的实现(有好的见解,欢迎喷~~):

1.用户表

mysql> desc auth_member;

+—————————+————–+——+—–+———+—————-+

| Field                     | Type         | Null | Key | Default | Extra          |

+—————————+————–+——+—–+———+—————-+

| id                        | int(11)      | NO   | PRI | NULL    | auto_increment |

| username                  | varchar(50)  | YES  | UNI | NULL    |                |

| password                  | varchar(50)  | YES  |     | NULL    |                |

| realname                  | varchar(50)  | YES  |     | NULL    |                |

| email                     | varchar(100) | YES  | UNI | NULL    |                |

| registry_time             | datetime     | YES  |     | NULL    |                |

| registry_ip               | varchar(50)  | YES  |     | NULL    |                |

| last_login_time           | datetime     | YES  |     | NULL    |                |

| update_time               | datetime     | YES  |     | NULL    |                |

| last_password_update_time | datetime     | YES  |     | NULL    |                |

| total_login_times         | int(11)      | YES  |     | NULL    |                |

| avatar                    | varchar(255) | YES  |     | NULL    |                |

| is_first_login            | int(11)      | YES  |     | NULL    |                |

| delete_flag               | int(11)      | YES  |     | NULL    |                |

+—————————+————–+——+—–+———+—————-+

16 rows in set (0.00 sec)

2.token表

mysql> desc auth_log_token;

+————–+————-+——+—–+———+—————-+

| Field        | Type        | Null | Key | Default | Extra          |

+————–+————-+——+—–+———+—————-+

| id           | int(11)     | NO   | PRI | NULL    | auto_increment |

| uid          | int(11)     | YES  |     | NULL    |                |

| token        | varchar(50) | YES  |     | NULL    |                |

| create_time  | datetime    | YES  |     | NULL    |                |

| refresh_time | datetime    | YES  |     | NULL    |                |

| valid_time   | datetime    | YES  |     | NULL    |                |

| is_valid     | int(11)     | YES  |     | NULL    |                |

+————–+————-+——+—–+———+—————-+

7 rows in set (0.00 sec)


id 标识,uid用户Id,token类似于session的唯一串根据一定算法声称,create_time生成时间,refresh_time 刷新时间,valid_time失效时间,is_valid是否失效




运作:

1.用户登录: https://(请求)  username+password通过签名认证, 获取token,默认token有效时间可以根据用户设置的记住密码时间,或者默认30min

2.用户通过接口获取数据:用户请求服务器接口需要携带token和username,通过判断token是否有效,token和传递的用户名是否匹配等,验证token合法性

3.每次验证token成功更新refresh-time字段,valid_time时间更新,增加token有效时间

4.如果要构造单点登录,用户每次登陆判断token表中uid记录是否存在,如果存在直接更新;如果构建多点登陆,用户每次登陆,直接在token表中插入新记录。用户退出,直接将is_valid字段设为1(即已经失效),valid_time 设置为当前时间


转载于:https://my.oschina.net/wanglihui/blog/150726