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 11 years, 5 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 11 years, 5 months ago

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

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

Your Answer