PHP为安卓提供接口如何保持会话?


刚用PHP配合安卓做完了一个项目,回过头来整理了下,有几个问题没理清楚:
1.为安卓提供API接口,一般都是返回JSON字符串,这个我封装了一个简单的函数:


 function returnMsg($code,$msg,$info){
            $message=array();
            $message['code']=$code;
            $message['msg']=$msg;

            if(!empty($info)){
                $message['info']=$info;
            }

            return json_encode($message);
        }

发现这个函数不太好用,容易出现多级嵌套,大家有没有好点的建议?
2.为了防止有人恶意请求接口,我这里给每个接口加了一个token,这样做合理么?
3.用户登录后,返回uid给安卓,安卓请求登录后才能访问的页面时,每次请求都带上uid,是这样子的么,有没有更好的方法?
4.为了防止抓包,修改uid遍历其他用户信息,我给每个登录后的用户生成了一个userToken(不同于2中得token),这样做是不是也是合理的??

以上是做接口的过程中,遇到的几个问题,请大家多多指教??

Android php api 接口

stream 10 years, 11 months ago

首先,API 不建议带上 cookie 访问,增加 APP 端工作量,增加流量,大幅降低速度,得不偿失。

  1. 传统场景下的安全问题有很多种解决方案,token 就是一种,在此不再敖述。现在 APP 应该着力解决假 wifi 的问题。假 wifi 即为电脑使用软件利用网卡或路由器等设备建立一个开放 wifi,通过对连入此 wifi 的设备的流量进行监测,得到没有 SSL 加密过的完整 URL,以及所有的cookie,使用此 URL 和 cookie 对服务器进行攻击。
  2. 使用 SSL (HTTPS)可以直接解决这个问题。
  3. 如果没有使用 SSL 的条件,如果要让别人拿到 URL 和 cookie 还不能对服务器进行攻击,就需要对此 API 设定一个时间窗口,过期失效。这需要 URL 要有两个参数:time 和 以 time 为 seed 进行 hash 得到的 token。剩余的时间同步、窗口大小设定等问题不再敖述。
  4. 别忘了对传输的内容也进行校验哦~
  5. 还是 SSL 好! (⊙o⊙)
Jud.ah answered 10 years, 11 months ago

我们现在小项目还是用session +cookie 每次提交的时候带上cookie就是了
不知道你用的什么框架,Yii 和 laravel都自带过滤器,包括你的token uid之类的"门票" 都可以在controller的初始化函数中进行规则验证只需要配置一个验证规则Array,无需到每个action里面做验证
当然每次提交的时候还是要把token uid付上,付到参数或者header都行

不器用なグルメ answered 10 years, 11 months ago

Your Answer