ecmall的注册流程index.php?app=member&act=register。

首先app是member,act是register方法。

index.php中。通过ecmall的startup方法来启动,主要包含了eccore/ecmall.php,startup方法中包含eccore/controller/app.base.php和eccore/model/model.base.php基础类,通过

1 $app = isset($_REQUEST['app']) ? trim($_REQUEST['app']) : $default_app;
2 $act = isset($_REQUEST['act']) ? trim($_REQUEST['act']) : $default_act;

来获取app和act。

如果是注册,act=member那么

1 $app_class_name = ucfirst($app) . 'App';
2 /* 实例化控制器 */
3 $app new $app_class_name();

这里的$app = new MemberApp,调用MemberApp类里面的register方法。而在register方法里面,获取注册信息。通过global.lib.php中的ms方法。

1 include(ROOT_PATH . '/includes/passport.base.php');
2 include(ROOT_PATH . '/includes/passports/' . MEMBER_TYPE . '.passport.php'.regissword.php

而在register中ms()函数中以下程序

1 include(ROOT_PATH . '/includes/passports/' . MEMBER_TYPE . '.passport.php');
2 $class_name  = ucfirst(MEMBER_TYPE) . 'Passport';
3 $ms new $class_name();

包含了default.passport.php中的DefaultPassport类,而他又继承了BasePassport,他有几行代码

1 $user_class_name = ucfirst($this->_name) . 'PassportUser';
2 $this->user = new $user_class_name();

所以程序里面的$this -> user就是这么来的。

$user_class_name其实就是includes/passports/default.passport.php中的DefaultPassportUser类。而他又extends了BasePassportUser,他调用了BasePassportUser中的_local_add()方法。而_local_add()方法通过调用model中的 member.model.php中的初始化数据,通过eccore/model/model.base.php中的BaseModel类下的function add($data, $compatible = false)方法来进行数据库处理。从而完成了注册功能。

01 /**
02  *  添加一条记录
03  *
04  *  @author Garbin
05  *  @param  array $data
06  *  @return mixed
07  */
08 function add($data$compatible = false)
09 {
10     if (empty($data) || !$this->dataEnough($data))
11     {
12         return false;
13     }
14  
15     $data $this->_valid($data);
16     if (!$data)
17     {
18         $this->_error('no_valid_data');
19         return false;
20     }
21     $insert_info $this->_getInsertInfo($data);
22     $mode $compatible 'REPLACE' 'INSERT';
23  
24     $this->db->query("{$mode} INTO {$this->table}{$insert_info['fields']} VALUES{$insert_info['values']}");
25     $insert_id $this->db->insert_id();
26     if ($insert_id)
27     {
28         if ($insert_info['length'] > 1)
29         {
30             for ($i $insert_id$i $insert_id $insert_info['length']; $i++)
31             {
32                 $id[] = $i;
33             }
34         }
35         else
36         {
37             /* 添加单条记录 */
38             $id $insert_id;
39         }
40     }
41  
42     return $id;
43 }

登录机制

ecmall电子商务系统的登陆,过程其实非常复杂。首先他是通过调用mall\default\login.html来调用登陆页面,调用的程序是通过app\frontend.base.php的login方法来调用来实现的。

if (!IS_POST)程序表示登陆页面的显示,通过$this->display('login.html')的调用来处理。ecmall的login.html页面主要有以下几个变量要传递,user_name,password,captcha三个变量,来用用于登陆验证。$user_name = trim($_POST['user_name'])和$password = $_POST['password']主要是用来接受用户名和密码的。通过连接登陆中心$ms =& ms()来调用$ms->user->auth($user_name, $password)来进行登陆验证的。

文件includes/global.lib.php中的function &ms()就是用来连接登陆中心的。 include(ROOT_PATH . '/includes/passports/' . MEMBER_TYPE . '.passport.php'); $class_name = ucfirst(MEMBER_TYPE) . 'Passport';$ms = new $class_name();这里就是来声明登陆对象的.

ECMall注册机制简要分析的更多相关文章

  1. Android AsyncTask内部线程池异步执行任务机制简要分析

    如下分析针对的API 25的AsyncTask的源码: 使用AsyncTask如果是调用execute方法则是同步执行任务,想要异步执行任务可以直接调用executeOnExecutor方法,多数情况 ...

  2. 小记--------spark的Master的Application注册机制源码分析及Master的注册机制原理分析

    原理图解: Master类位置所在:spark-core_2.11-2.1.0.jar的org.apache.spark.deploy.master下的Master类   //截取了部分代码 //处理 ...

  3. Netfilter之连接跟踪实现机制初步分析

    Netfilter之连接跟踪实现机制初步分析 原文: http://blog.chinaunix.net/uid-22227409-id-2656910.html 什么是连接跟踪 连接跟踪(CONNT ...

  4. Unity3.0基于约定的自动注册机制

    前文<Unity2.0容器自动注册机制>中,介绍了如何在 Unity 2.0 版本中使用 Auto Registration 自动注册机制.在 Unity 3.0 版本中(2013年),新 ...

  5. Java虚拟机类加载机制——案例分析

    转载: Java虚拟机类加载机制--案例分析   在<Java虚拟机类加载机制>一文中详细阐述了类加载的过程,并举了几个例子进行了简要分析,在文章的最后留了一个悬念给各位,这里来揭开这个悬 ...

  6. Spark系列(六)Master注册机制和状态改变机制

    各组件的注册流程如下图: 注册机制源码说明: 入口:org.apache.spark.deploy.master文件下的receiveWithLogging方法中的case RegisterAppli ...

  7. Android AdapterView 源码分析以及其相关回收机制的分析

    忽然,发现,网上的公开资料都是教你怎么继承一个baseadapter,然后重写那几个方法,再调用相关view的 setAdpater()方法, 接着,你的item 就显示在手机屏幕上了.很少有人关注a ...

  8. Android Hal层简要分析

    Android Hal层简要分析 Android Hal层(即 Hardware Abstraction Layer)是Google开发的Android系统里上层应用对底层硬件操作屏蔽的一个软件层次, ...

  9. SEAndroid安全机制简要介绍和学习计划

    与iOS相比.Android最被人诟病的是其流畅性和安全性. 然而,从4.0開始,Android不遗余力地改善其流畅性. 特别是在即将公布的L版本号中,用ART替换了Dalvik,相信会越来越流畅.至 ...

随机推荐

  1. Android_ImageView

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools=&q ...

  2. 将table内容输出为csv文件

    1.创建 directory create or replace directory tt as'c:\'; SELECT * FROM DBA_OBJECTS DO WHERE DO.OBJECT_ ...

  3. android 中 系统日期时间的获取

    import    java.text.SimpleDateFormat; SimpleDateFormat    formatter    =   new    SimpleDateFormat   ...

  4. ASP.NET 预编译

    ASP.NET 预编译概述 https://msdn.microsoft.com/zh-cn/library/bb398860%28v=VS.90%29.aspx 如何:预编译 ASP.NET 网站以 ...

  5. select random item with weight 根据权重随机选出

    http://eli.thegreenplace.net/2010/01/22/weighted-random-generation-in-python/ 类似俄罗斯轮盘赌

  6. jquery动态添加/删除 tr/td

    <head runat="server"> <title></title> <!--easyui --> <link rel= ...

  7. CSS Masking(翻译)

    原文地址:http://www.html5rocks.com/en/tutorials/masking/adobe/ 关于计算机图形,两种常见的操作是:cliping(裁剪) and  masking ...

  8. GCC --verbose选项, -lpthread 和-pthread的区别

    verbose的意思是冗长的,繁杂的.顾名思义,gcc --verbose 的意思就是打印出编译连接时的详细信息. 参考stackoverflow中的文章结合自己机器的信息给出分析(其实也就是翻译了一 ...

  9. grunt-npm编译bootstrap源码

    因为gmu需要用编译的方式下载,于是联想到bootstrap什么less sass编译 less先学,据说基于js编译和less编译器,安装起来详细, sass据网上介绍基于ruby, 以下为在mac ...

  10. margin系列之内秀篇(二)

    本系列摘自  飘零雾雨的博客 可挖掘性 之前已经写过一篇关于 margin 应用场景的文章:margin系列之内秀篇,当然,它的应用场景会远大于文中所述,无法一一列举. 所以本篇权当是对此的补遗好了, ...