App和后台通信基于session_id的登录验证
来源:互联网 发布:excel找相同数据 编辑:程序博客网 时间:2024/06/06 02:58
场景介绍
众所周知,App 和 后台的通信是通过无状态的短连接实现的,当App发起请求是创建连接,待到请求结束则关闭连接。实现方式要么是HTTP协议,要么是TCP协议(短连接)。既然是无状态的短连接,那么问题来了。比如:App的 一些 action 都是需要登陆之后才有权限操作的,但是通过什么信息来确定 当前用户是登陆状态呢。
我们先来一个场景看看:
某个银行的手机App,使用的过程中可能发现以下现象:
1. 需要登陆才能查询和操作
2. 当前手机上是登陆状态,但是我从另一个手机用相同用户登陆之后,再到当前手机上执行一些操作,结果App强制重新登录。
3. 登陆后长时间没有操作,然后再去操作时,App强制重新登录
我们来分析以下以上现象:
关于1. 这个不需要说明了吧 ^_^
关于2. 从现象可以得知,用户在App上同一时间只允许一个登陆,怎么知道我的手机上不是最近时间登陆的呢?可能是发现某个ID不是我的,或者登陆时间不是我之前的登录时间。
关于3. 可知有一个超时机制,超过设定时间后,强制重新登录。
Session ID 的设计
那么我们根据以上场景来设计一个机制吧,原理很简单。
用户在App和后台通信,通过一个 session_id 来识别。
1. 用户登录的时候更新 session_id, 且设置失效时间
2.App和后台通信的每次请求都捎上session_id,后台从库中读出session_id,然后与App传过来的session_id比较,如session_id不一样或者失效,都强制重新登录。
实现
使用KV存储如 memcached 或者 redis, 用户登录的时候生成一个 session_id(要唯一),然后写到KV存储,然后设置失效时间。当用户请求过来的时候,后台从KV存储中读取出对应的session_id, 若结果为空,说明失效了,若结果和用户传过来的session_id不同,说明不是最近时间登陆的,返回强制重新登陆给App。
redis 例子:
> SET 用户ID 343875485SHDD // 设置session_id为343875485SHDD
> EXPIRE 用户ID 300 // 设置失效时间为 300 秒
- App和后台通信基于session_id的登录验证
- app与php后台接口登录认证、验证(seesion和token)
- 基于servlet的登录验证
- ajax简单的后台用户登录验证
- 【java】struts和ajax的小例子①→后台的登录验证
- 基于ajax的简单的登录验证
- app验证用户登录
- App后台开发运维和架构实践学习总结(4)——APP的注册和登录功能设计
- 基于javascript的用户登录页面验证
- 基于struts拦截器的登录验证
- 基于JSP+Servlet的用户登录验证
- 基于验证码模拟登录的爬虫
- php 基于cookie的用户登录验证
- ssm框架后台对app的接口进行登录验证(拦截器,更智能只要方法上面有这个定义注解就验证)
- App登陆java后台处理和用户权限验证
- 、绕过登录验证进入后台的方法整理
- 后台登录(包含验证码)的php代码实现
- onethink的后台登录验证码突然一直提示错误
- 登录模块设计思路
- oracle恢复删除后的数据
- maven中如何将所有引用的jar包打包到一个jar中
- Docker源码分析(六):Docker Daemon网络
- Java中的平方
- App和后台通信基于session_id的登录验证
- uva10034 Freckles
- 求两个升序数组的交集,并集,补集
- svn 问题汇总
- offsetWidth、clientWidth、width、scrollWidth区别及js与jQuery获取的方式
- 软件测试报告
- Windows Embedded 7 最简便EWF系统制作方案
- Docker源码分析(七):Docker Container网络 (上)
- 详解单例模式