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();