下面我来说一下我自己的思路:


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设计相关推荐

  1. 原生app登录 后台方案(token方案)

    原来经常用oauth2 的password方案来做登录,自己给自己app做授权没毛病呀,但后面一下有点不对,这里应该是有问题的.于是学习了原生app登录的方案.并学习一系列登录有关知识.特此记录,这是 ...

  2. Android studio设计app登录界面

    Android studio设计app登录界面 UI界面设计 在设计登录界面时,可以使用不同布局方式来实现该功能,通常情况下使用的是LinearLayout(线性布局)和TableLayout(表格布 ...

  3. app开发人脸登录和指纹登录_App产品登录环节如何设计?四步掌握登录设计思路...

    智能手机已经成为人类不可分割的器官,人们在线上处理生活的方方面面的习惯已经形成,APP作为线上渠道最主要的方式之一,已被各行各业广泛使用.这里将持续的和大家一同谈论关于APP产品设计的各模块.细节的设 ...

  4. APP登录界面设计:注册框 or 登录框,哪个更合理?

    登录和注册过程往往是产品和用户的 First Sight,因此登录注册入口是给用户留下好的第一印象的关键.遵循"所有的设计都应有据可循"的原则,下面是我司设计团队对"登录 ...

  5. App 后台架构设计方案 设计思想与最佳实践

    CSDN 2016博客之星评选结果公布      [系列直播]零基础学习微信小程序!        "我的2016"主题征文活动     博客的神秘功能 App 后台架构设计方案 ...

  6. Vue3+Element-PIus 登录功能业务流程设计 五

    1 登录业务流程 1.1登录业务流程 ① 在登录页面输入用户名和密码 ② 调用后台接口进行验证 ③ 通过验证之后,根据后台的响应状态跳转到项目主页 1.2登录业务的相关技术点 ① http 是无状态的 ...

  7. python token发送请求_python发送requests请求时,使用登录的token值,作为下一个接口的请求头信息...

    python发送requests请求时,使用登录的token值,作为下一个接口的请求头信息 登录接口代码: 在这里插入图片描述 登陆后返回的结果是: 在这里插入图片描述 新增渠道接口: 新增渠道接口需 ...

  8. 精致的App登录页设计欣赏给你灵感

    很多新手设计登录/注册页的时候,更多是站在视觉角度考量,尝试各种的风格诸如极简.拟 物.微质感等,而忽视了用户体验设计. 设计没思路,那么就需要从这几个方面着手: 了解产品的背景,产品未来发展方向. ...

  9. SpringCloud工作笔记050---关于同一账号多人同时登录的token重复问题

    JAVA技术交流QQ群:170933152 这里设计上我认为可以这样,在redis中存的是,可以直接存token为key,然后对应用户的user内容,为json字符串,作为redis的value ,用 ...

最新文章

  1. redis最大储存512m_redis系列篇01
  2. Nginx 502 bad gateway的解决方案
  3. 回车ajax显示,ajax返回值中有回车换行、空格的解决方法分享
  4. 四位共阳极数码管显示函数_数码管模块.doc
  5. 实例44:python
  6. mysql 优化配置 大批量数据插入_[译] MySQL 最佳实践 —— 高效插入数据
  7. indy10 UDP实例
  8. Docker入门-架构
  9. 文件怎么更新_iOS13屏蔽更新描述文件失效了怎么办?iOS13屏蔽系统更新教程
  10. Android 开发笔记“context和getApplicationContext”
  11. Comparable与Comparator对象比较
  12. sqlite3源码调试
  13. 应用随机过程张波商豪_应用随机过程张波课后答案
  14. 首都师范 博弈论 5 4 4 多人合作博弈问题 Shapley计算之财产分配问题
  15. 复盘图像双线性插值推导细节
  16. 【WPF学习手记】WPF超链接使用
  17. 数据库--sql查询某一时间段数据
  18. c语言-计算摄氏温度
  19. 【面试题】概率题总结(随机数、抛硬币)
  20. 【Dubbo】dubbo 2.6.x 的dubbo-admin管理平台的搭建

热门文章

  1. Android 从系统媒体库中选择视频
  2. java企业员工出差报销预算管理系统-SSH-Mysql
  3. 办公室最经常用到的WIFI ip地址设置(window10)
  4. Oracle根据生日计算年龄
  5. 2022-2028年中国中医医疗机构行业投资策略探讨及市场规模预测报告
  6. python用*号输出字母c的图案_第1.6题:使用Python生成字母验证码图片
  7. Excel如何批量为员工信息表添加照片
  8. [反汇编练习] 160个CrackMe之024
  9. vijos-1199,核弹危机
  10. c语言 关键字volatile和register