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 设置为当前时间   

     
  • 相关阅读:
    Centos搭建SVN服务器
    JavaScript 对象 之创建对象 学习笔记
    ThinkPHP 学习记录
    Git 版本控制 在 WIN 下的一些使用方法
    关于 CSS 的重用性
    双飞翼布局和圣杯布局
    cocos2dx3.8 ios打包脚本编写
    如何做dragonbones的lua绑定(xcode)
    【转】如何做dragonbones的lua绑定(Android)
    【转】如何做dragonbones的lua绑定(VisualStudio)
  • 原文地址:https://www.cnblogs.com/LvLoveYuForever/p/6560952.html
Copyright © 2011-2022 走看看