stanley-king преди 9 години
родител
ревизия
3879c57c2a
променени са 8 файла, в които са добавени 104 реда и са изтрити 61 реда
  1. 5 1
      core/framework/function/core.php
  2. 18 33
      data/model/member.model.php
  3. 7 6
      fcgi_run.php
  4. 18 0
      helper/TypeException.php
  5. 3 1
      helper/session.php
  6. 19 0
      mobile/control/control.php
  7. 23 18
      mobile/control/login.php
  8. 11 2
      mobile/util/errcode.php

+ 5 - 1
core/framework/function/core.php

@@ -95,7 +95,11 @@ function setNcCookie($name, $value, $expire='3600', $path='', $domain='', $secur
 	if (empty($domain)) $domain = SUBDOMAIN_SUFFIX ? SUBDOMAIN_SUFFIX : '';
 	$name = defined('COOKIE_PRE') ? COOKIE_PRE.$name : strtoupper(substr(md5(MD5_KEY),0,4)).'_'.$name;
 	$expire = intval($expire)?intval($expire):(intval(SESSION_EXPIRE)?intval(SESSION_EXPIRE):3600);
-	$result = setcookie($name, $value, time()+$expire, $path, $domain, $secure);
+	if(is_mobile()) {
+		$result = fcgi_setcookie($name, $value, time()+$expire, $path, $domain, $secure);
+	} else {
+		$result = setcookie($name, $value, time()+$expire, $path, $domain, $secure);
+	}
 	$_COOKIE[$name] = $value;
 }
 

+ 18 - 33
data/model/member.model.php

@@ -57,44 +57,30 @@ class memberModel extends Model
      * @param string $type
      * @return array
      */
-    public function getMemberID($openid, $type, $passwd = '')
+    public function getMemberInfoEx($openid, $type, $passwd = '')
     {
         if (empty($openid) || !in_array($type, array(0, 1, 2))) {
+            return NULL;
+        }
+
+        $conditions = array();
+        $conditions['member_type'] = $type;
+        if ($type == self::mobile_login) {
+            $conditions['member_mobile'] = $openid;
+            $conditions['member_passwd'] = md5($passwd);
+        } elseif ($type == self::anonymous_login) {
+            $conditions['anonymous_id'] = $openid;
+        } elseif ($type == self::wxopen_login) {
+            $conditions['member_wxopenid'] = $openid;
+        } else {
             return -1;
         }
 
-        $key = $this->gen_openid_uid($openid, $type);
-        $user = rcache($key, 'member');
-
-        if (!empty($user)) {
-            if (($type == 0) && (md5($passwd) != $user['member_passwd'])) {
-                return -1;
-            }
-        } else {
-            $conditions = array();
-            $conditions['member_type'] = $type;
-            if ($type == self::mobile_login) {
-                $conditions['member_mobile'] = $openid;
-                $conditions['member_passwd'] = md5($passwd);
-            } elseif ($type == self::anonymous_login) {
-                $conditions['anonymous_id'] = $openid;
-            } elseif ($type == self::wxopen_login) {
-                $conditions['member_wxopenid'] = $openid;
-            } else {
-                return -1;
-            }
-
-            Log::record("member.model.php,getMemberID,conditions['member_mobile']={$conditions['member_mobile']},conditions['member_passwd']={$conditions['member_passwd']},", Log::DEBUG);
-            $user = $this->getMemberInfo($conditions, 'member_id,member_passwd');
-            Log::record("member.model.php,getMemberID user={$user['member_id']}", Log::DEBUG);
-            if (empty($user)) {
-                return -1;
-            } else {
-                wcache($key, $user, 'member');
-            }
-        }
+        Log::record("member.model.php,getMemberID,conditions['member_mobile']={$conditions['member_mobile']},conditions['member_passwd']={$conditions['member_passwd']}", Log::DEBUG);
+        $user = $this->getMemberInfo($conditions);
+        Log::record("member.model.php,getMemberID user={$user['member_id']}", Log::DEBUG);
 
-        return $user['member_id'];
+        return $user;
     }
 
     /**
@@ -295,7 +281,6 @@ class memberModel extends Model
             $this->editMember(array('member_id' => $member_info['member_id']), $update_info);
         }
         setNcCookie('cart_goods_num', '', -3600);
-
     }
 
     /**

+ 7 - 6
fcgi_run.php

@@ -7,6 +7,7 @@ require_once (BASE_ROOT_PATH . '/fooder.php');
 require_once (BASE_ROOT_PATH . '/helper/http_header.php');
 require_once (BASE_ROOT_PATH . '/helper/session.php');
 require_once (BASE_ROOT_PATH . '/helper/func.php');
+require_once (BASE_ROOT_PATH . '/helper/TypeException.php');
 
 function pays_execute($file)
 {
@@ -40,8 +41,6 @@ function run_fcgi()
             init_cookie($_SERVER['HTTP_COOKIE']);
             session::instance()->start();
 
-            $_SESSION['name'] = 'stanley';
-
             Log::record(request_helper::req_uri(),Log::DEBUG);
 
             $file = request_helper::script_file();
@@ -60,10 +59,12 @@ function run_fcgi()
                 echo "no such file.";
             }
 
-            fcgi_setcookie("myname",'stanley');
-
-           session::instance()->end();
-        } catch (Exception $ex) {
+            session::instance()->end();
+        }
+        catch (TypeException $ex) {
+            joutput_error($ex->getCode(),$ex->getMessage());
+        }
+        catch (Exception $ex) {
             joutput_error($ex->getCode(),$ex->getMessage().'@@@@@'.$ex->getTraceAsString());
         }
 

+ 18 - 0
helper/TypeException.php

@@ -0,0 +1,18 @@
+<?php
+
+/**
+ * Created by PhpStorm.
+ * User: stanley-king
+ * Date: 16/3/6
+ * Time: 下午10:42
+ */
+class TypeException extends Exception
+{
+    public function __construct()
+    {
+        $code = errcode::ErrApptype;
+        $message = errcode::msg($code);
+
+        parent::__construct($message, $code, null);
+    }
+}

+ 3 - 1
helper/session.php

@@ -13,6 +13,8 @@ class session
     private $redis = NULL;
     private $enable = false;
 
+
+    const sid_expire = 60;
     const type = 'redis';
     const save_path = 'tcp://127.0.0.1:6379';
     const prefix = 'PHPREDIS_SESSION';
@@ -78,7 +80,7 @@ class session
         if(empty($ret)) {
             return '';
         } else {
-            fcgi_header("Set-Cookie: PHPSESSID={$sid}");
+            fcgi_setcookie("PHPSESSID","{$sid}",time() + 60);
             return $ret[0];
         }
     }

+ 19 - 0
mobile/control/control.php

@@ -27,6 +27,25 @@ class mobileControl
         if ($page > 0) {
             $this->page = $page;
         }
+
+        if($this->check_app_type() == false) {
+            Log::record("Err client type.",Log::ERR);
+            throw new TypeException();
+        }
+    }
+
+    protected function check_app_type()
+    {
+        $client = $_COOKIE['client'];
+        if(empty($client)) {
+            $client = $_POST['client'];
+        }
+
+        if (empty($client) || !in_array($client, $this->client_type_array)) {
+            return false;
+        } else {
+            return true;
+        }
     }
 }
 

+ 23 - 18
mobile/control/login.php

@@ -26,8 +26,12 @@ class loginControl extends mobileHomeControl
      */
     public function indexOp()
     {
-        if (!in_array($_POST['client'], $this->client_type_array)) {
-            return joutput_error(errcode::ErrApptype);
+        if ($_SESSION['is_login'] == '1') { //检查是否已经登录
+            return joutput_error(errcode::ErrHasLogined);
+        }
+
+        if (process::islock('login')) { //检查登录操作是否已经锁定
+            return joutput_error(errcode::ErrOperRepeat);
         }
 
         $type = trim($_POST['type']);
@@ -52,26 +56,27 @@ class loginControl extends mobileHomeControl
         }
 
         $model_member = Model('member');
-        $userid = $model_member->getMemberID($openid, $type, $password);
+        $member_info = $model_member->getMemberInfoEx($openid, $type, $password);
 
-        if ($userid == -1) {
-            return joutput_error(errcode::ErrLogin, "用户名或密码错误");
+        if (is_array($member_info) and !empty($member_info))
+        {
+            if (!$member_info['member_state']) {
+                return joutput_error(errcode::ErrAccountStop);
+            }
         } else {
-            $key = memberModel::gen_uid_token($userid);
-            $ret = rcache($key, 'member');
-            if (empty($ret)) {
-                $token = $this->_get_token($userid, $openid, 'lrlz');
-                wcache($key, array('token' => $token), 'member', self::token_expire);
+            process::addprocess('login');
+            return joutput_error(errcode::ErrLogin, "用户名或密码错误");
+        }
 
-                $key_token_uid = memberModel::gen_token_uid($token);
-                wcache($key_token_uid, array('userid' => $userid), 'member', self::token_expire);
+        $model_member->createSession($member_info);
+        process::clear('login');
 
-                $ret['cache_expiration_time'] = TIMESTAMP + self::token_expire * 60;
-                $ret['token'] = $token;
-            }
-            $ret['systime'] = TIMESTAMP;
-            joutput_data($ret);
-        }
+        // cookie中的cart存入数据库
+        Model('cart')->mergecart($member_info, $_SESSION['store_id']);
+        // cookie中的浏览记录存入数据库
+        Model('goods_browse')->mergebrowse($_SESSION['member_id'], $_SESSION['store_id']);
+
+        return joutput_data(NULL);
     }
 
     /**

+ 11 - 2
mobile/util/errcode.php

@@ -11,6 +11,7 @@ class errcode extends SplEnum
     const ErrApptype = 10000;
     const ErrParamter = 10001;
     const ErrLogin = 10002;
+    const ErrHasLogined = 10003;
     const ErrUsertype = 10004;
     const ErrTokenExpire = 10005;
     const ErrSmscodeExpire = 10006;
@@ -19,6 +20,8 @@ class errcode extends SplEnum
     const ErrUserExisted = 10009;
     const ErrPasswd = 10010;
     const ErrMobileNotBinded = 10011;
+    const ErrOperRepeat = 10012;
+    const ErrAccountStop = 10013;
 
     const ErrSpecial = 10100;
 
@@ -63,9 +66,11 @@ class errcode extends SplEnum
             case errcode::ErrProtocolDisabled:
                 return '协议未启用';
             case errcode::ErrApptype :
-                return '类型错误';
+                return '应用类型错误';
             case errcode::ErrLogin :
                 return '用户名或密码错误';
+            case errcode::ErrHasLogined :
+                return '当前在登录状态,请先登出再登录.';
             case errcode::ErrUsertype :
                 return '用户类型错误';
             case errcode::ErrTokenExpire :
@@ -76,8 +81,12 @@ class errcode extends SplEnum
                 return '验证码错误';
             case errcode::ErrIDbinded:
                 return '用户已经绑定';
-            case errcode::ErrMobileNotBinded:
+            case errcode::ErrMobileNotBinded :
                 return '手机号尚未绑定';
+            case errcode::ErrOperRepeat :
+                return '您的操作过于频繁,请稍后再试';
+            case errcode::ErrAccountStop :
+                return '';
             case errcode::ErrSpecial:
                 return 'ErrSpecial.';
             case errcode::ErrPayment: