如何维持APP用户的登陆状态

2024-03-25 11:32
文章标签 app 用户 状态 登陆 维持

本文主要是介绍如何维持APP用户的登陆状态,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

如何维持APP用户的登陆状态

一。一种方式
原文链接:http://ciniao.legu.cc/appcan/article_54.html

 

这个问题太过于常见,也过于简单,以至于大部分开发者根本没有关注过这个问题,我根据和我沟通的开发者中,总结出来常用的方法有以下几种:

 (个人觉得不简单么)

一:服务端默认的session

这种方式最大的优点是服务端不用增加任何代码,但APP与网站不同,通常情况下,我们会希望APP的登陆状态能维持数天,甚至数月之久,大部分的服务端程序,都会在进程重启时或客户端多久不活动时,将session全部清空,致使状态丢失

 

二、在客户端记录登陆用户的用户名和密码

客户端在登陆时,判断如果服务端返回验证成功,则将用户名和密码(为了客户端安全起见,可以将password多次md5)保存到本地的localStorage中,然后每次HTTP请求时,将用户名和密码带到参数中,服务端每次都需要读取数据库判断合法性,会浪费一定的服务器资源,同时,因为密码保存到本地,带来了一定的安全风险。

 

三:借助于数据库或文件系统等维持持久状态

这种方式,是为了解决方法一中session不持久的问题(如:将session保存的位置修改到文件或数据库),以及方案二中的安全性问题,不过这会降低服务端性能,或浪费服务端资源,代码逻辑流程如下:

数据库中,除了常见的user,password之外,额外增加一个字段,如:sessionID

在登陆接口中,如果判断用户输入的用户名密码正确时,生成一个随机字符串,保存到sessionID中,同时,客户端也将该值保存,在每次请求时,传递该值,服务端通过该值查询数据库,取得用户的身份信息。

 

四:密钥方式

以上三种方法,要么不能持久保存状态,要么不安全,要么每次请求都需要读取数据库验证,有没有一种方法,能解决以上的缺陷呢,于是,就有了这个方法,流程如下:

 

1:客户端输入用户名和密码,提交到服务端验证

2:服务端验证成功后,给客户端返回以下值:

uid : 用户的唯一标示

time : 当前unix时间戳

key : MD5(uid+time+"一个只有你自己知道的字符串密钥")

3:客户端保存以上3个值在本地,每次HTTP请求时,将以上3个值发送到服务端

4:服务端验证key,判断如果与客户端发送的key一致,则说明用户身份无误

5:服务端每次收到请求时,通过当前时间-客户端time字段得到的差值,可以控制这个key的有效期

 二。类似第三方登录的方式

 OAuth2.0的refresh token

或者微信公众平台的方式:

http://mp.weixin.qq.com/wiki/11/0e4b294685f817b95cbed85ba5e82b8f.html

三。app  利用memcached 保持登录

http://www.zhihu.com/question/29714299

http://www.blogjava.net/stevenjohn/archive/2013/04/03/397372.html

http://ask.dcloud.net.cn/article/157

四。安全角度:从安全和体验上解析移动App的登录

不过个人建议你长期保持登陆

这样安全性不好

最好是 自动登录~提供自动登录

至于session机制,也是需要服务器后台设置时长的。

http://baike.baidu.com/view/3858474.htm

http://tech.it168.com/j/2006-07-19/200607191220593_2.shtml

哎,失误了,不用考虑后台该考虑的事情了。

2015/12/03

1.app端与server端的心跳包:长链接,适合TCP/IP

http方式,后台session的自动延续,session设置超时时间,到期自动延续。app端不会出现session过期。

2.Image的蒙层效果。

实现点击图片(ImageView)变暗效果,有一个较简单的方法,就是将目标图片设置为背景图片(setBackground),再创建一个selector.xml文件,里面放置一张普通状态时的透明图片,一张点击状态下的棕色半透明图片,将其设置为ImageView的源图片。这样在点击ImageView时,源图片会变换透明度,达到变暗效果。但这种方法有个缺点:由于源图片已经被限制死了,假如我们需要自定义背景图片,将目标图片放置在背景图片上,就无法实现了。

多用一个ImageView控件,半透明背景的,放在目标ImageView的上面,点击的时候换另一种透明度背景的。这个方法用了两层

还可以通过滤镜和监听onTouchEvent事件来达到变暗效果的方法。关于滤镜,以后接触

这篇关于如何维持APP用户的登陆状态的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/844874

相关文章

hdu1043(八数码问题,广搜 + hash(实现状态压缩) )

利用康拓展开将一个排列映射成一个自然数,然后就变成了普通的广搜题。 #include<iostream>#include<algorithm>#include<string>#include<stack>#include<queue>#include<map>#include<stdio.h>#include<stdlib.h>#include<ctype.h>#inclu

hdu1565(状态压缩)

本人第一道ac的状态压缩dp,这题的数据非常水,很容易过 题意:在n*n的矩阵中选数字使得不存在任意两个数字相邻,求最大值 解题思路: 一、因为在1<<20中有很多状态是无效的,所以第一步是选择有效状态,存到cnt[]数组中 二、dp[i][j]表示到第i行的状态cnt[j]所能得到的最大值,状态转移方程dp[i][j] = max(dp[i][j],dp[i-1][k]) ,其中k满足c

状态dp总结

zoj 3631  N 个数中选若干数和(只能选一次)<=M 的最大值 const int Max_N = 38 ;int a[1<<16] , b[1<<16] , x[Max_N] , e[Max_N] ;void GetNum(int g[] , int n , int s[] , int &m){ int i , j , t ;m = 0 ;for(i = 0 ;

hdu3006状态dp

给你n个集合。集合中均为数字且数字的范围在[1,m]内。m<=14。现在问用这些集合能组成多少个集合自己本身也算。 import java.io.BufferedInputStream;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.Inp

从状态管理到性能优化:全面解析 Android Compose

文章目录 引言一、Android Compose基本概念1.1 什么是Android Compose?1.2 Compose的优势1.3 如何在项目中使用Compose 二、Compose中的状态管理2.1 状态管理的重要性2.2 Compose中的状态和数据流2.3 使用State和MutableState处理状态2.4 通过ViewModel进行状态管理 三、Compose中的列表和滚动

实例:如何统计当前主机的连接状态和连接数

统计当前主机的连接状态和连接数 在 Linux 中,可使用 ss 命令来查看主机的网络连接状态。以下是统计当前主机连接状态和连接主机数量的具体操作。 1. 统计当前主机的连接状态 使用 ss 命令结合 grep、cut、sort 和 uniq 命令来统计当前主机的 TCP 连接状态。 ss -nta | grep -v '^State' | cut -d " " -f 1 | sort |

【Kubernetes】K8s 的安全框架和用户认证

K8s 的安全框架和用户认证 1.Kubernetes 的安全框架1.1 认证:Authentication1.2 鉴权:Authorization1.3 准入控制:Admission Control 2.Kubernetes 的用户认证2.1 Kubernetes 的用户认证方式2.2 配置 Kubernetes 集群使用密码认证 Kubernetes 作为一个分布式的虚拟

状态模式state

学习笔记,原文链接 https://refactoringguru.cn/design-patterns/state 在一个对象的内部状态变化时改变其行为, 使其看上去就像改变了自身所属的类一样。 在状态模式中,player.getState()获取的是player的当前状态,通常是一个实现了状态接口的对象。 onPlay()是状态模式中定义的一个方法,不同状态下(例如“正在播放”、“暂停

qml states 状态

states 状态 在QML中,states用于定义对象在不同状态下的属性变化。每个状态可以包含一组属性设置,当状态改变时,这些属性设置会被应用到对象上。 import QtQuick 2.15import QtQuick.Controls 2.15// 定义应用程序的主窗口ApplicationWindow {visible: true // 使窗口可见width: 640 /

vue2实践:el-table实现由用户自己控制行数的动态表格

需求 项目中需要提供一个动态表单,如图: 当我点击添加时,便添加一行;点击右边的删除时,便删除这一行。 至少要有一行数据,但是没有上限。 思路 这种每一行的数据固定,但是不定行数的,很容易想到使用el-table来实现,它可以循环读取:data所绑定的数组,来生成行数据,不同的是: 1、table里面的每一个cell,需要放置一个input来支持用户编辑。 2、最后一列放置两个b