App web 跨平台信息同步

2 篇文章 0 订阅
1 篇文章 0 订阅

2016年10月28日17:07:03
项目需求:

web端报名参加活动- need login-
App 内打开web-view -if app内登录过 web端也需要同步登录信息
遇到的问题:
App内WebView 再次打开Cookie 丢失–so login info 丢失

前端处理:
login 成功后将cookie 利用h5 localstorage本地存储存起来
每次打开页面js 方法判断cookie 。 localstorage 是否存在。
这样可以持久化cookie.防止cookie丢失问题。

—————构造函数 获取用户信息from redis struct-data=>hash

        $token = $_COOKIE['dy_web_login_cookie'];//本地存储的token --通过login 获取
        if (empty($token)) {//没登录
            //获取 是否是APP内登录 打开的标示
            //  $token = $_COOKIE['dy_game_app_cookie'];//本地存储的token --通过login 获取
            //检测--逻辑
        }
        $redis = Cache::getInstance('Redis');
        $redis_json = $redis->hget('dy_web_user_list', $token);
        $redisInfo = json_decode($redis_json, true);
        $this->userInfo = $redisInfo;
        $this->assign("userInfo", $redisInfo);

————— 登录成功后set 用户信息 —————

        login success -生成token
        $redis = Cache::getInstance('Redis');
        $field = sha1($mobile. rand(1, 999999));
        $userInfo['tle'] = time() + 24 * 3600 * 30;
        $userInfo['token'] = $field;
        $redisInfo = json_encode($userInfo);
        $redis->hset('dy_web_user_list', $field, $redisInfo);//set user_info
        $redis->hset('dy_web_mobile_token', $mobile, $field);//mobile to  =>best new token
        setcookie('dy_web_login_cookie', $field,time() + 24 * 3600 * 30);

当APP内改变用户信息的时候执行syncRedisInfoByMobile。这样Redis 的数据也更新了–当我们对模板赋值的时候就是最新的了。

    public function syncRedisInfoByMobile($mobile, $result)
    {
        $redis = Cache::getInstance('Redis');
        $gameTokenByMobile = $redis->hget('dy_web_mobile_token', $mobile);//mobile bind token
        if (!empty($gameTokenByMobile)) {
            $redis_json = $redis->hget('dy_web_user_list', $gameTokenByMobile);//token bind dy_user_info
            $redisInfo = json_decode($redis_json, true);
            foreach($result as $k => $v){
                $redisInfo[$k] = $v;
            }
            $redis->hset('dy_web_user_list', $gameTokenByMobile, $redisInfo);//token bind dy_user_info
        }
        return true;
    }

如何在前端判断当前客户端是否登录?
需要客户端配合 封装javascript:interface
比如:
xiaowei.getLoginStatus();

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值