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

 

移动端没有session怎么处理的更多相关文章

  1. PHP 解决同一个IP不同端口号session冲突的问题

    在项目的开发阶段,我们经常会遇到几个站点共用同一个IP用不同端口号区分的形式!但是,这样很容易导致一个问题,session冲突丢失!即两个站点具有相同的session变量,清除session的时候即全 ...

  2. java访问webservce,保持会话,服务端保存session验证

    在进行程序开发的过程中,遇到一个问题,怎么保持会话. 因为一帮进行方法调用很少涉及到即时身份验证的. 例如: 1:客户端登录后服务端保存登录用户信息: 2:客户端持有验证通过key再次请求: 3:服务 ...

  3. android如何与asp.net服务端共享session

    近期需要实现一个功能,就是需要通过发送短信进行注册,现在想把短信验证码放到服务器的session值中,当客户端收到短信并提交短信码时由asp.net服务端进行判断,那么如何共享这个session那么需 ...

  4. 服务端关闭session的重要性

    原因如下: 如果你的站点是一个每日请求上百万级规模的接口服务, 每一次请求(这里应该是没有携带cookie的请求)都会在服务端产生一个session会话,也就是一个小文件. 一般而言,php的sess ...

  5. SpringBoot修改默认端口号,session超时时间

    有时候我们可能需要启动不止一个SpringBoot,而SpringBoot默认的端口号是8080,所以这时候我们就需要修改SpringBoot的默认端口了.修改SpringBoot的默认端口有两种方式 ...

  6. 移动客户端与服务端Session那点秘密

    众所周知,做过Web开发的小伙伴可能知道,在浏览器向服务器发一个请求,服务器端会为当前的访问者创建一个session会话,随着浏览器的关闭而会话结束.但是移动客户端咋整呢(IOS/Android啥的) ...

  7. session 在PC端正常设置读取,在移动端无法正常读取

    一.背景 最近在做一个面向三端[H5.IOS.安卓]的短信验证码登录接口.发送短信验证码时,服务端通过 session 保存验证码的值.登录时,从 session 获取验证码和用户输入的验证码 相比较 ...

  8. HTTP Session、Cookie机制详解

    一.什么是http session,有什么用 HTTP协议本身是无状态的,本身并不能支持服务端保存客户端的状态信息,于是,Web Server中引入了session的概念,用来保存客户端的状态信息. ...

  9. java的会话管理:Cookie和Session

    java的会话管理:Cookie和Session 1.什么是会话 此处的是指客户端(浏览器)和服务端之间的数据传输.例如用户登录,购物车等 会话管理就是管理浏览器客户端和服务端之间会话过程产生的会话数 ...

随机推荐

  1. Azure Linux 云主机使用Root超级用户登录

    Azure的Linux虚拟机是可以灵活使用root超级用户的管理员权限的: 1:使用sudo passwd root指令设置超级用户root密码: 使用创建Linux时设置的用户名和密码登陆,使用su ...

  2. 复合词UVa10391(STL简单应用)

    一.题目 输入一系列由小写字母组成的单词.输入已按照字典序排序(这句话就是个陷阱),且不超过120000个.找出所有的复合词,即恰好由两个单词连接而成的单词. 二.解题思路 要么枚举两两拼接的情况,O ...

  3. C# 重写(override)和覆盖(new)

    重写 用关键字 virtual 修饰的方法,叫虚方法.可以在子类中用override 声明同名的方法,这叫“重写”.相应的没有用virtual修饰的方法,我们叫它实方法.重写会改变父类方法的功能.   ...

  4. jsc 解码窥探

    先使用 JS_DecodeScript反编译jsc  得到AST树 AST树词法解析 http://esprima.org/ AST还原成源码: npm install escodegen AST树遍 ...

  5. 屏蔽Alt+F4关闭窗体

    实现效果: 知识运用: KeyEventArgs类的Alt,Handled属性 public virtual bool Alt {get;} //获取一个值 该值指示是否曾按下Alt键 public ...

  6. 解决IIS7多域名绑定同一物理目录,设置不同的默认文档的问题

    IIS7多域名绑定同一物理目录,设置不同的默认文档是没办法设置的,因为在一个物理目录下只有一个web.config,并且IIS7把默认文档设置写在这里,导致所有域名的默认文档设置共享.解决方法:1.进 ...

  7. tp5 -- 微信公众号支付

    近来期间比较忙, 忙完之后发现最近有挺多的东西没有整理,于是乎.就将以前用到的一些小东西整理了一下. 如果对您有帮助,则是我最大的幸运. 本篇主要是说了一下整合TP5的微信公众号支付. 不过由于最近T ...

  8. WinForm各种关闭

    Appication.Exit(); Environment.Exit(); System.Threading.Thread.CurrentThread.Abort(); Process.GetCur ...

  9. 有趣的this以及apply,call,bind方法

    看this指向谁,要看执行时而非定义时(箭头函数除外).函数没有绑定在对象上调用,非'strict'模式下,this指向window,否则为undefined 改变this指向的方法 1. apply ...

  10. Linux基础学习系列目录导航

    Linux基础学习-通过VM安装RHEL7.4 Linux基础学习-命令行与图形界面切换 Linux基础学习-基本命令 Linux基础学习-RHEL7.4之YUM更换CentOS源 Linux基础学习 ...