Authored by whb

Merge branch 'develop' of http://git.dev.yoho.cn/web/yohobuy into develop

... ... @@ -49,7 +49,10 @@ class WebAction extends Controller_Abstract
*/
public function init()
{
if (!$this->isAjax()) {
Mobile::isGoMobile();
}
$this->_request = $this->getRequest();
// 设置环境变量
... ...
... ... @@ -49,29 +49,29 @@ class Mobile
public static function match($url, $host, $uri)
{
//guang.yohobuy.com
//guang.yohobuy.com/1.html
$list = array(
array(
'match' => '#^([guang\.]*)yohobuy\.com(\/*)$#',
),
array(
'match' => '#([guang\.]*)yohobuy.com/([0-9]+).html#',
'to' => 'guang.m.yohobuy.com/info/index?id='.substr($uri,1,(strpos($uri,'.')-1)) ,
),
);
foreach ($list as $value) {
if (preg_match($value['match'], $url) && !empty($value['to'])) {
return $value['to'];
} else if (preg_match($value['match'], $url)) {
$newHost = self::newHost($host);
return $newHost . $uri;
}
}
$continueList = array('www', 'list', 'search');
$hostSplit = explode('.', $host);
return 'm.yohobuy.com';
// //guang.yohobuy.com
// //guang.yohobuy.com/1.html
// $list = array(
// array(
// 'match' => '#^([guang\.]*)yohobuy\.com(\/*)$#',
// ),
// array(
// 'match' => '#([guang\.]*)yohobuy.com/([0-9]+).html#',
// 'to' => 'guang.m.yohobuy.com/info/index?id='.substr($uri,1,(strpos($uri,'.')-1)) ,
// ),
// );
// foreach ($list as $value) {
// if (preg_match($value['match'], $url) && !empty($value['to'])) {
// return $value['to'];
// } else if (preg_match($value['match'], $url)) {
// $newHost = self::newHost($host);
// return $newHost . $uri;
// }
// }
//
// $continueList = array('www', 'list', 'search');
// $hostSplit = explode('.', $host);
return 'm.yohobuy.com' . $uri;
}
/**
... ... @@ -91,18 +91,18 @@ class Mobile
public static function isMobile()
{
$userAgent = self::getUserAgent();
$mobile_agents = Array("240x320","acer","acoon","acs-","abacho","ahong","airness","alcatel","amoi","android","anywhereyougo.com","applewebkit/525","applewebkit/532","asus","audio","au-mic","avantogo","becker","benq","bilbo","bird","blackberry","blazer","bleu","cdm-","compal","coolpad","danger","dbtel","dopod","elaine","eric","etouch","fly ","fly_","fly-","go.web","goodaccess","gradiente","grundig","haier","hedy","hitachi","htc","huawei","hutchison","inno","ipad","ipaq","ipod","jbrowser","kddi","kgt","kwc","lenovo","lg ","lg2","lg3","lg4","lg5","lg7","lg8","lg9","lg-","lge-","lge9","longcos","maemo","mercator","meridian","micromax","midp","mini","mitsu","mmm","mmp","mobi","mot-","moto","nec-","netfront","newgen","nexian","nf-browser","nintendo","nitro","nokia","nook","novarra","obigo","palm","panasonic","pantech","philips","phone","pg-","playstation","pocket","pt-","qc-","qtek","rover","sagem","sama","samu","sanyo","samsung","sch-","scooter","sec-","sendo","sgh-","sharp","siemens","sie-","softbank","sony","spice","sprint","spv","symbian","tablet","talkabout","tcl-","teleca","telit","tianyu","tim-","toshiba","tsm","up.browser","utec","utstar","verykool","virgin","vk-","voda","voxtel","vx","wap","wellco","wig browser","wii","windows ce","wireless","xda","xde","zte");
$is_mobile = false;
if (stristr($userAgent, 'ipad')) {
return $is_mobile;
return false;
}
foreach ($mobile_agents as $device) {
$mobileAgents = array('iphone','android',"240x320","acer","acoon","acs-","abacho","ahong","airness","alcatel","amoi","anywhereyougo.com","applewebkit/525","applewebkit/532","asus","audio","au-mic","avantogo","becker","benq","bilbo","bird","blackberry","blazer","bleu","cdm-","compal","coolpad","danger","dbtel","dopod","elaine","eric","etouch","fly ","fly_","fly-","go.web","goodaccess","gradiente","grundig","haier","hedy","hitachi","htc","huawei","hutchison","inno","ipad","ipaq","ipod","jbrowser","kddi","kgt","kwc","lenovo","lg ","lg2","lg3","lg4","lg5","lg7","lg8","lg9","lg-","lge-","lge9","longcos","maemo","mercator","meridian","micromax","midp","mini","mitsu","mmm","mmp","mobi","mot-","moto","nec-","netfront","newgen","nexian","nf-browser","nintendo","nitro","nokia","nook","novarra","obigo","palm","panasonic","pantech","philips","phone","pg-","playstation","pocket","pt-","qc-","qtek","rover","sagem","sama","samu","sanyo","samsung","sch-","scooter","sec-","sendo","sgh-","sharp","siemens","sie-","softbank","sony","spice","sprint","spv","symbian","tablet","talkabout","tcl-","teleca","telit","tianyu","tim-","toshiba","tsm","up.browser","utec","utstar","verykool","virgin","vk-","voda","voxtel","vx","wap","wellco","wig browser","wii","windows ce","wireless","xda","xde","zte");
$isMobile = false;
foreach ($mobileAgents as $device) {
if (stristr($userAgent, $device)) {
$is_mobile = true;
$isMobile = true;
break;
}
}
return $is_mobile;
return $isMobile;
}
/**
... ... @@ -112,10 +112,9 @@ class Mobile
public static function isGoMobile()
{
if (empty($_COOKIE['m2w']) && self::isMobile()) {
$newUrl = self::getNewUrl();
Header("HTTP/1.1 301 Moved Permanently");
header('Location:http://'.$newUrl);
exit;
header("HTTP/1.1 301 Moved Permanently");
header('Location:http://'.self::getNewUrl());
exit();
}
return true;
}
... ...
... ... @@ -137,20 +137,26 @@ class PassportModel
/*
* 重写递增计数 cache方法
* $key cache-key
* $key cache-key,递增存放变量
* $offset 递增偏移量
* $initValue 初始化值
* $expiry 缓存时间
*/
public static function increment($key, $offset = 1, $initValue = 0, $expire = 1800)
public static function increment($key, $timeKey, $offset = 1, $initValue = 0, $expire = 1800)
{
//初始化key
if (!Cache::get($key)) {
Cache::set($key, $initValue, $expire);
}
//增加偏移量
$cacheValue = intval(Cache::get($key))+$offset;
Cache::set($key, $cacheValue, $expire);
//有效期之外清除key
if (!Cache::get($timeKey) && Cache::get($key)) {
Cache::delete($key);
}
//初始化计时
if (!Cache::get($timeKey) && !Cache::get($key)) {
Cache::set($timeKey, TRUE, $expire);
Cache::set($key, $initValue);
}
//未过期则递增
$cacheValue = intval(Cache::get($key)) + $offset;
Cache::set($key, $cacheValue);
}
}
... ...
... ... @@ -113,7 +113,7 @@ class AutouserinfoController extends WebAction
}
//未注册 未绑定
if ($res['code'] == 200) {
$next = Helpers::url('/thirdlogin/index', array(
$next = Helpers::url('/thirdlogin/noregist', array(
'openId' => $openId,
'sourceType' => $sourceType,
'area' => $area,
... ... @@ -135,6 +135,9 @@ class AutouserinfoController extends WebAction
$this->echoJson($data);
}
/*
* 根据手机号获取用户相关信息
*/
public static function getUserInfo($area, $mobile)
{
$userInfo = UserData::getUserInfoByMobile($area, $mobile);
... ... @@ -162,16 +165,16 @@ class AutouserinfoController extends WebAction
break;
}
$phoneNum = trim($this->post('mobile'));
$areaCode = trim($this->post('area'));
$mobile = trim($this->post('mobile'));
$area = trim($this->post('area'));
//校验手机号格式
if (!is_numeric($phoneNum) || !is_numeric($areaCode)) {
if (!is_numeric($mobile) || !is_numeric($area)) {
$data['code'] = 400;
$data['message'] = '手机号码格式不正确';
break;
}
$data = BindData::sendBindMsg($areaCode, $phoneNum);
$data = BindData::sendBindMsg($area, $mobile);
if (!isset($data['code'])) {
break;
}
... ... @@ -194,17 +197,17 @@ class AutouserinfoController extends WebAction
break;
}
$phoneNum = trim($this->post('mobile'));
$areaCode = trim($this->post('area'));
$mobile = trim($this->post('mobile'));
$area= trim($this->post('area'));
$code = trim($this->post('code')); //短信验证码
//校验手机号格式
if (!is_numeric($phoneNum) || !is_numeric($areaCode)) {
if (!is_numeric($mobile) || !is_numeric($area)) {
$data['code'] = 400;
$data['message'] = '手机号码格式不正确';
break;
}
$data = BindData::checkBindCode($areaCode, $phoneNum, $code);
$data = BindData::checkBindCode($area, $mobile, $code);
if (!isset($data['code'])) {
break;
}
... ... @@ -227,8 +230,8 @@ class AutouserinfoController extends WebAction
break;
}
$phoneNum = trim($this->post('mobile'));
$areaCode = trim($this->post('area', '86'));
$mobile = trim($this->post('mobile'));
$area = trim($this->post('area', '86'));
$openId = trim($this->post('openId'));
$sourceType = trim($this->post('sourceType'));
$code = trim($this->post('code')); //短信验证码
... ... @@ -236,20 +239,20 @@ class AutouserinfoController extends WebAction
$password = empty($password) ? '' : $password;
//校验手机号格式
if (!is_numeric($phoneNum) || !is_numeric($areaCode)) {
if (!is_numeric($mobile) || !is_numeric($area)) {
$data['code'] = 400;
$data['message'] = '手机号码格式不正确';
break;
}
//校验手机验证码
$bindMsgFlag = BindData::checkBindCode($areaCode, $phoneNum, $code);
$bindMsgFlag = BindData::checkBindCode($area, $mobile, $code);
if (isset($bindMsgFlag['code']) && $bindMsgFlag['code'] != 200) {
$data['code'] = 400;
$data['message'] = '短信验证码不正确';
break;
}
//绑定手机号
$res = BindData::bindMobile($openId, $sourceType, $phoneNum, $areaCode, $password);
$res = BindData::bindMobile($openId, $sourceType, $mobile, $area, $password);
if (!isset($res['code'])) {
break;
}
... ...
... ... @@ -70,7 +70,7 @@ class LoginController extends WebAction
*/
public function authAction()
{
$data = array('code' => 400, 'message' => '您输入的密码及账户名不匹配,是否<a href="'.Helpers::url('/passport/back/index').'" target="_blank">忘记密码?</a>', 'data' => '');
$data = array('code' => 400, 'message' => '您输入的密码及账户名不匹配,是否<a href="' . Helpers::url('/passport/back/index') . '" target="_blank">忘记密码?</a>', 'data' => '');
do {
/* 判断是不是AJAX请求 */
if (!$this->isAjax()) {
... ... @@ -108,26 +108,43 @@ class LoginController extends WebAction
*/
$ip = Helpers::getClientIp();
$ipKey = md5('ip_signin_' . $ip);
$ipTimeKey = md5('ip_signin_time' . $ip);
$accountKey = md5('account_signin_' . $account);
PassportModel::increment($ipKey, 1, 0, 3600);
$accountTimeKey = md5('account_signin_time' . $account);
//cache初始化,非有效时间内清除次数,有效时间内叠加cache计数
if (!Cache::get($accountTimeKey) && Cache::get($accountKey)) {
Cache::delete($accountKey);
}
if (!Cache::get($accountTimeKey) && !Cache::get($accountKey)) {
Cache::set($accountTimeKey, true, 1800);
Cache::set($accountKey, 0);
}
if (!Cache::get($ipTimeKey) && Cache::get($ipKey)) {
Cache::delete($ipKey);
}
if (!Cache::get($ipTimeKey) && !Cache::get($ipKey)) {
Cache::set($ipTimeKey, true, 3600);
Cache::set($ipKey, 0);
}
$accountTimes = Cache::get($accountKey);
if ($accountTimes > 10) {
$ipTimes = Cache::get($ipKey);
if ($accountTimes >= 10) {
$data = array('code' => 400, 'message' => '您的账号已被暂时锁定,请稍后再试', 'data' => '');
break;
}
$ipTimes = Cache::get($ipKey);
if ($ipTimes > 100) {
if ($ipTimes >= 100) {
$data = array('code' => 400, 'message' => '您尝试的次数过多,账号已被暂时锁定,请稍后再试', 'data' => '');
break;
}
$data = LoginData::signin($area, $account, $password, $shoppingKey);
if (!isset($data['code']) || $data['code'] != 200 || !isset($data['data']['uid'])) {
PassportModel::increment($accountKey, 1, 0, 1800);
$data = array('code' => 400, 'message' => '您输入的密码及账户名不匹配,是否<a href="'.Helpers::url('/passport/back/index').'" target="_blank">忘记密码?</a>', 'data' => '');
Cache::set($accountKey, intval(Cache::get($accountKey)) + 1);
Cache::set($ipKey, intval(Cache::get($ipKey)) + 1);
$data = array('code' => 400, 'message' => '您输入的密码及账户名不匹配,是否<a href="' . Helpers::url('/passport/back/index') . '" target="_blank">忘记密码?</a>', 'data' => '');
break;
}
//登录成功
$refer = $this->getCookie('refer');
if (empty($refer) || strstr($refer, 'signin.html') || strstr($refer, 'passport/login/index')) {
$refer = SITE_MAIN;
... ...
... ... @@ -48,7 +48,8 @@ class RegisterController extends WebAction
$ip = Helpers::getClientIp();
$data = array('code' => 400, 'message' => '', 'data' => '');
$ipKey = md5('ip_checkmobile_' . $ip);
PassportModel::increment($ipKey, 1, 0, 3600);
$ipTimeKey = md5('ip_checkmobile_time_' . $ip);
PassportModel::increment($ipKey,$ipTimeKey,1, 0, 3600);
$ipTimes = Cache::get($ipKey);
do{
/* 判断是不是AJAX请求 */
... ... @@ -60,7 +61,7 @@ class RegisterController extends WebAction
$data['message'] = '手机号码格式不正确';
break;
}
if ($ipTimes >= 500) {
if ($ipTimes > 500) {
$data['message'] = '由于你IP受限无法注册';
break;
}
... ... @@ -130,7 +131,8 @@ class RegisterController extends WebAction
}
//发送代码
$sendCodeKey = md5('send_code_' . $area . '_' . $mobile);
PassportModel::increment($sendCodeKey, 1, 0, 3600);
$sendCodeTimeKey = md5('send_code_time_' . $area . '_' . $mobile);
PassportModel::increment($sendCodeKey,$sendCodeTimeKey, 1, 0, 3600);
$sendCodeTimes = Cache::get($sendCodeKey);
if ($sendCodeTimes > 50) {
$data['message'] = '发送验证码太多';
... ...
... ... @@ -3,6 +3,7 @@
use Action\WebAction;
use Passport\PassportModel;
use LibModels\Wap\Passport\RegData;
use WebPlugin\Helpers;
class ThirdloginController extends WebAction
{
... ... @@ -24,8 +25,8 @@ class ThirdloginController extends WebAction
'simpleHeader' => $simpleHeader,
'openId' => $openId,
'sourceType' => $sourceType,
'region' => RegData::getAreasData(),
'serviceUrl' => Helpers::url('/help', array('category_id' => 9))
'region' => RegData::getAreasData(),//区域
'serviceUrl' => Helpers::url('/help', array('category_id' => 9))//服务条款
);
$this->_view->display('index', $data);
... ...
... ... @@ -3,7 +3,7 @@
use Action\WebAction;
use LibModels\Web\Product\FavoriteData;
use Product\BrandsModel;
use product\HotrankModel;
use Product\HotrankModel;
class IndexController extends WebAction
{
... ...