iOS- token,我对你有些看法
前言:�时间过了这么久了,写了好多文章的头,很想完善却没有时间,完完整整的整合再一次,无论是写文章,还是摘录文章,都是一个梳理思维,学习成长的过程,也许你忘记了可以回来翻一下,看一看,或者有什么新的想法可以重新编辑一下,方便了自己,也分享了知识,有意的可以一块学习,互相交流。
- 对于token,我想无论是做什么开发的,都会接触到,我们先了解一下它的基本概念:
- token值,又叫登录令牌!主要是用来判断当前用户的登录状态。
- token值得特点:是一个字符串/大整数,只需要保证唯一性。
是服务器根据用户信息(账号、密码、身份认证机制(电话号、身份证号、支付宝账号、银行卡信息......)来生成的用户表示信息。
- token值获取:当用户首次登录成功时,服务端就会生成一个token值。
1.会在服务器保存token值(保存在数据库)
2.将这个token值返回给客户端
- 客户端拿到token值后,一般保存在两个位置
1.将token保存在cookie中;
2.将token保存在沙盒中,作为一个公共参数传递(这个情况比较多)
- 公共参数:每一个网络请求都需要参数!一般公共参数有很多都是“可选”参数!
公共参数附带的越多,越利于后台监测用户,数据挖掘会使用到监测到的数据。
- 以后客户端再次发送网络请求(一般不是登录请求)的时候,就会将这个token发送到服务器。
- 服务器收到客户端请求之后会取出token值与保存在本地的token值做对比。
1.如果两个token值相同:说明用户登录成功过!当前用户处于登录状态!
2.如果两个token值不同:说明原来的登录信息已经失效,让用户重新登录
- 关于token值失效问题:
1.token值时间失效
1.1如果App是新闻类、游戏类、聊天类等需要长时间的用户粘性,一般可以设置1年的有效时间
1.2如果用户是支付类、银行类。一般token只得有小时间比较短15分钟左右。
2.token值用来做设备唯一性判断!
每次登录之后,无论用户名是否改变,只要调用登录接口并且登录成功,
都会在服务器生成新的token值,原来的token值就会失效!
例如:打车软件类
小拓展一下多台设备同时登录。设备的唯一性登录!
如果允许多台设备同时登录,并且可以设置最大登录的数量的时候。例如QQ:允许在电脑端登录,QQ手机端登录,QQ网页端登录如果超出这三个端,想要在另外一个相同的端登录,需要使对应的端token失效,来保证一个端一个账号只能登录一次。
可以设置多个token根据登录端不同,来监测token是否过期。根据登录的数量可以判断最大支持多少个设备同时登录。
概念就先聊到这里,我想看了上边的介绍,你应该对token有个大致的了解主要是判断登录状态。下面,谈谈我的理解,和遇到的问题:
如果在每次程序启动的时候,我们都像服务器发送请求,获取token。首先,在此之前,我们必须要有向服务器所发送的必需参数,才能获取token。这样呢,就会有个问题,如果用户没有登录,由于没有必要的参数,我们申请的token是不合法的。
这就需要我们,在用户首次,登录的时候,我们把必要的参数,存于项目本地,用于用户第二次、第三次、、、、向服务器所发送的必须参数,获取token。这就保证了,我们启动的时候,就会向服务器发送请求,保证了程序的不会因为token的过期,影响程序的主要功能不能用。token,过期了,我们就像服务器发送请求获取新的token。
Token,正常情况下过期的时间很长。一般为7天,但是项目需求如果是token半个小时过期,这就会面临着很多问题。前段基本上是无法处理的,或是很麻烦。甚是不好解决。
我寻求了很多人,都说这是后台的问题,我想解决,有基本的思路,但是却又很多漏洞。无法判断用户在哪个页面停留了多长时间。很多人都无法解决。
最后,有个人,跟我说,让后台加一个触发器,或是token值改成7天,当token值过期时,后台出一个接口,让用户退出登录,重新手动登录,这个还算合理。
不知道还有什么比较好的方法?如果您看了这篇文章,如果有更好的您可以简书留言!互相学习!如果您感觉对您有用,也可以赞赏一下,请小伙在这炎热的夏天,吃根冰棍消消暑。✧(≖ ◡ ≖✿)
参考文章:iOS登录及token的业务逻辑