zoukankan      html  css  js  c++  java
  • 移动端没有session怎么处理

    (转:https://my.oschina.net/wanglihui/blog/150726)

    手机客户端与服务器端的通信,不同于浏览器与服务器端的通信。浏览器和服务器端的通信依靠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 设置为当前时间   

     
  • 相关阅读:
    错误网络异常:android.os.NetworkOnMainThreadException
    方法服务android学习笔记42_服务的生命周期
    芯片软件随想录(关于核心技术)
    数组比特【编程珠玑】如何优化程序打印出小于100000的素数
    宋体函数Java乔晓松oracle分组函数
    调试客户端windbg远程调试方法
    方法对象Hibernate联合主键
    文件运行跟踪 root.sh 的 执行过程
    移植交叉编译pcDuino + busybox 成功搭建最小linux系统
    方法定制iOS学习笔记8UITableView的定制
  • 原文地址:https://www.cnblogs.com/LvLoveYuForever/p/6560952.html
Copyright © 2011-2022 走看看