app登录的token设计
下面我来说一下我自己的思路:
1.登录的时候,登录成功之后,我们需要给他分配一个token。(1)token可以是文件的形式存着;(2)也可以存在数据库,但是存放在数据库,我个人不推荐,因为每次调用api接口都会对比,这样做法会加重服务器压力;(3)用redis存放token。
我个人强烈推荐的用redis,其次就是文件形式。今天我们重点说文件形式(放在下文去讲),不管什么形式,都一样的思路。
2.登录之后,我们要返回token,让安卓或者ios去保存这个token,以后每次操作都携带token去请求接口。
3.接下来就是我们要用它传给我们的token去对比,如果符合,那就正常返回数据,否则就返回一个标识,告诉app说这个token不符合,需要重新登录。我所有返回的接口方式都是统一的,例如:
我事先会告诉app前端,告诉他们说,如果是code等于1就说明返回的参数是正确的。等于0就弹出msg等等。。。还有一个很重要的,就是code等于10000就跳到登录页面。
exit( json_encode(array('code'=>'10000','msg'=>'请先登录!')) ); //token失效了或者token不对
exit( json_encode(array('code'=>'0','msg'=>'参数无效')) );
exit( json_encode(array('code'=>'1','msg'=>'请先登录!','data'=>array())) ); //成功了,data就是返回的数据
上面的代码只是提供参考。
基本流程就是这样,接下来说的就是真正实现这个token了,token需要有哪些参数构成。(前面我说了,重点讲的是文件形式,或者你们也可以用来缓存在本地,方法大同小异,总之不建议放在数据库),不多说,直接贴代码
1.生成token的流程:每个用户,都只能有一个token文件,生成之前删除掉以前的token,避免冗余文件。
/* * 生成token *返回一个token值 */ private function get_token($userid){$token=$userid.'_'.MD5($userid.uniqid().rand(00000000,99999999)); //随机数 $file_dir=APP_PATH.'token/'.$userid.'/';if(!@is_dir($file_dir)){@mkdir($file_dir,0777,true);}else{ //删除之前所有的token文件 $dir_token=scandir($file_dir);foreach($dir_token as $key => $value){if($value == '.' || $value == '..'){}else{unlink($file_dir.$value);}}}$fh = fopen($file_dir.$token,'w');fwrite($fh,serialize(array('time'=>time(),'token'=>$token,'userid'=>$userid))); //这个根据自己的需求去对应的添加数据fclose($fh);return $token; }
2.app请求的接口传过来的token处理:判断时间是否过期,如果没有过期,可以考虑给它延长时间,不然会出现每天登录的情况。具体代码如下
在这个代码签名,有个全局变量:
public $userid=0;
$token=trim($this->input->post('token'))if($token){//1判断token文件是否存在, /*2.存在:判断时间是否过期 2.1过期:删除原来的token文件并要求重新登录 2.2没有过期:赋值用户id *3.不存在:要求重新登录 * */ $maxtime=86400 * 7;//7天过期时间设置(单位是秒) $fcode = array();//$this->newtoken=$token; $user_id=strstr($token,"_",true);$file=APP_PATH.'token/'.$user_id.'/'.$token;if(file_exists($file)){ //1存在 $fh = @fopen($file,'r');$fcode = unserialize(@fread($fh,filesize($file)));@fclose($fh);if($fcode['time']+$maxtime < time()){ //过期了 unlink($file);$this->userid=0;}else{ //没有过期 $this->userid=$fcode['userid'];$expire_time=86400 * 2;//两天的时间 为了加快运行效率,在没有过期的情况下,两天后再延长时间,不影响任何地方 if($fcode['time']+$expire_time < time()){$fh1 = fopen($file,'w');fwrite($fh1,serialize(array('time'=>time(),'token'=>$token,'userid'=>$fcode['userid'])));fclose($fh1);}}}else{$this->userid=0;}if($this->userid==0){exit( json_encode(array('code'=>'10000','msg'=>'请先登录!')) );} }
这样,我们就可以用token来获得用户的userid,然后用userid去操作了。是不是很简单。
这是第一次写博客,表达不清楚请谅解!!!
app登录的token设计相关推荐
- 原生app登录 后台方案(token方案)
原来经常用oauth2 的password方案来做登录,自己给自己app做授权没毛病呀,但后面一下有点不对,这里应该是有问题的.于是学习了原生app登录的方案.并学习一系列登录有关知识.特此记录,这是 ...
- Android studio设计app登录界面
Android studio设计app登录界面 UI界面设计 在设计登录界面时,可以使用不同布局方式来实现该功能,通常情况下使用的是LinearLayout(线性布局)和TableLayout(表格布 ...
- app开发人脸登录和指纹登录_App产品登录环节如何设计?四步掌握登录设计思路...
智能手机已经成为人类不可分割的器官,人们在线上处理生活的方方面面的习惯已经形成,APP作为线上渠道最主要的方式之一,已被各行各业广泛使用.这里将持续的和大家一同谈论关于APP产品设计的各模块.细节的设 ...
- APP登录界面设计:注册框 or 登录框,哪个更合理?
登录和注册过程往往是产品和用户的 First Sight,因此登录注册入口是给用户留下好的第一印象的关键.遵循"所有的设计都应有据可循"的原则,下面是我司设计团队对"登录 ...
- App 后台架构设计方案 设计思想与最佳实践
CSDN 2016博客之星评选结果公布 [系列直播]零基础学习微信小程序! "我的2016"主题征文活动 博客的神秘功能 App 后台架构设计方案 ...
- Vue3+Element-PIus 登录功能业务流程设计 五
1 登录业务流程 1.1登录业务流程 ① 在登录页面输入用户名和密码 ② 调用后台接口进行验证 ③ 通过验证之后,根据后台的响应状态跳转到项目主页 1.2登录业务的相关技术点 ① http 是无状态的 ...
- python token发送请求_python发送requests请求时,使用登录的token值,作为下一个接口的请求头信息...
python发送requests请求时,使用登录的token值,作为下一个接口的请求头信息 登录接口代码: 在这里插入图片描述 登陆后返回的结果是: 在这里插入图片描述 新增渠道接口: 新增渠道接口需 ...
- 精致的App登录页设计欣赏给你灵感
很多新手设计登录/注册页的时候,更多是站在视觉角度考量,尝试各种的风格诸如极简.拟 物.微质感等,而忽视了用户体验设计. 设计没思路,那么就需要从这几个方面着手: 了解产品的背景,产品未来发展方向. ...
- SpringCloud工作笔记050---关于同一账号多人同时登录的token重复问题
JAVA技术交流QQ群:170933152 这里设计上我认为可以这样,在redis中存的是,可以直接存token为key,然后对应用户的user内容,为json字符串,作为redis的value ,用 ...
最新文章
- redis最大储存512m_redis系列篇01
- Nginx 502 bad gateway的解决方案
- 回车ajax显示,ajax返回值中有回车换行、空格的解决方法分享
- 四位共阳极数码管显示函数_数码管模块.doc
- 实例44:python
- mysql 优化配置 大批量数据插入_[译] MySQL 最佳实践 —— 高效插入数据
- indy10 UDP实例
- Docker入门-架构
- 文件怎么更新_iOS13屏蔽更新描述文件失效了怎么办?iOS13屏蔽系统更新教程
- Android 开发笔记“context和getApplicationContext”
- Comparable与Comparator对象比较
- sqlite3源码调试
- 应用随机过程张波商豪_应用随机过程张波课后答案
- 首都师范 博弈论 5 4 4 多人合作博弈问题 Shapley计算之财产分配问题
- 复盘图像双线性插值推导细节
- 【WPF学习手记】WPF超链接使用
- 数据库--sql查询某一时间段数据
- c语言-计算摄氏温度
- 【面试题】概率题总结(随机数、抛硬币)
- 【Dubbo】dubbo 2.6.x 的dubbo-admin管理平台的搭建