php_mvc实现步骤七
shop34-5-登录表单
登录功能分析

功能:登录表单
C控制器-动作
back后台admin控制器loginAction动作完成该功能。
Application/back/controller/AdminController.class.php

增加动作:
完成动作:

M模型
不需要!
V视图层-模板
增加登录表单模板,展示!
Application/back/view/login.html

按照ecshop的后台样式展示结构即可!
表单action地址:

必要的元素:

提交:

测试请求该动作:
Index.php?p=back&c=Admin&a=login

处理页面上的图片,CSS,JS
项目中所用的CSS,JS,图片需要在浏览器端请求到,在浏览器解释执行的。
与项目中核心类,模型类,控制器类,模板文件不同,这些不能在浏览器端直接请求到。
应该将css,图片统一管理在一个可以被访问到的地址!
新建一个子目录,专门用于存放哪些可以被浏览器直接请求的资源(JS,CSS,Image)

并依据平台进行管理:

模板中载入css或者图片的路径需要更改:
Login.html


Tip:防止浏览器直接请求到framework及其appliction


设计管理员表
67.255.255.255
一个字节:8个位:
00000000——————11111111
一个IPv4地址与一个无符号整型,可以进行相互转化:

表语句:

插入几条测试数据:

shop34-6-验证管理员合法性
功能:管理员验证
控制器-动作
Back/AdminController->checkAction();

模型
为操作admin表,建立模型AdminModel
Application/back/Model/AdminModel.class.php

测试:
别忘了修改数据服务器信息,为项目所用!(增加配置文件)

视图-模板
不需要
shop34-7-跳转
案例中实现跳转
封装一个可以完成跳转的方法,需要时,调用即可!
控制器的功能!
该功能应该被所有的控制器动作所共享,因此,应该在基础控制器中被定义:
Controller.class.php

实现:
分析,参数:
$url, 目标URL地址
$info, 提示信息
$wait, 等待时间
为 info和wait增加默认参数,可以做到,即可完成立即,也可以完成提示跳转!

代码实现:

项目中使用:
Back/AdminController->checkAction()

测试:
创建一个后台首页动作!
Application/back/controller/ManageController.class.php
indexAction();

shop34-8-session登录验证
浏览器登录验证分析
在访问到后台首页(后台所有功能)时,应该先判断当前浏览器是否处于登录状态,再做功能的实现!如果没有登录,则跳转到登录页面。
如何判断当前浏览器用户是否登录?
管理员合法 –> 处于登录状态

登录标志:
一个数据。
如何存储这个数据呢?
[不合理的]测试:
变量:
分配(back/AdminController->checkAction())

验证(back/ManageController->indexAction())

总结:不行,原因是:
数据的生命周期问题,对于PHP来说,所有数据(变量,常量)的最大生命周期,一个脚本周期(浏览器向服务器发出一次请求,服务器将该请求交由PHP处理,PHP处理完了给服务器,服务器响应给浏览器,就是一个脚本周期)
可见:登录标志的存储,需要可以跨脚本周期存储数据的一种形式(持久性存储数据的机制)
[不合理的]测试:
文件:
不行,原因是:
在服务器端管理的文件(数据库中)是不区分浏览器端,对于任何一个浏览器都是通用的!
可见:登录标志的存储,需要可以区分浏览器,并在该浏览器的多次请求周期内,可以持久存储的一种数据存储机制!
以上的存储机制,就是会话技术!
Session完成登录状态的存储
分配:
Back/AdminController->checkAction();

判断:
Back/ManageController->indexAction()

shop34-9-SESSION入库
项目中的session入库
以框架基础代码中 扩展工具的角色 出现项目中!

增加相应的目录常量:
Index.php

采用面向对象的编程思想完成:
工具类。
要求:
增加session入库工具类(完成其自动加载)
入库操作由工具类对象的方法充当。
在实例化该工具类对象时,完成设置session处理器,并开启session。
增加session入库工具类(完成其自动加载)


入库操作由工具类对象的方法充当
要求使用项目中统一的DAO完成数据库操作。
在实例化该工具类对象时,完成设置session处理器,并开启session。
由构造方法完成:

使用:
创建session表:

项目中,原本session_start(),由new SessionDB即可!



php_mvc实现步骤七的更多相关文章
- php_mvc实现步骤九(登录验证码,退出-登录标记)
shop34-17-登录验证码 验证码的分析 登录:防止暴力破解 论坛:防止灌水水 展示类:被抓取. 需要技术: 图片处理技术. 会话session技术. PHP图片处理技术 – GD 具体操作步骤 ...
- php_mvc实现步骤十
shop34-19-商品添加 功能:添加商品表单 Index.php?p=back&c=Goods&a=add Controller-Action: 新建商品控制器类 Applicat ...
- php_mvc实现步骤八
shop34-10-框架类 框架类(框架初始化类) 将原来入口文件中功能,放在该类中完成,入口文件变得简单,轻量! 将入口文件中的各个功能,由框架类的各个方法,完成: 为了简单化,使用纯静态的类.(看 ...
- php_mvc实现步骤六
shop34-1-目录布局 存在项目的根目录 shop34 框架代码与应用程序代码划分 框架代码: 在各个应用程序间可以通用的代码. 应用程序代码: 当前项目的业务逻辑实现的代码. 分别创建两个子目录 ...
- php_mvc实现步骤五
5.match_controller 控制器层典型实现 控制器类 依据功能的相关性,将一系列相关的功能,使用一个控制器类来处理,而该控制器的每个方法,就对因某个功能. 注意:控制器是按照功能划分的.( ...
- php_mvc实现步骤三,四
3.match_mvc MVC 以ecshop的前台为例: 功能一: 首页 购物车数据,商品分类数据,其他的首页需要的数据 功能二: 拍卖活动 购物车数据,商品分类数据,拍卖相关数据 功能三: 团购商 ...
- php_MVC实现步骤二
2.match_split 显示逻辑相分离 将功能强制分成两个部分,显示html文件,和逻辑PHP文件: 要求浏览器请求负责功能的PHP逻辑文件: 该PHP逻辑文件,对需要的显示内容进行载入. 逻辑P ...
- php_MVC实现步骤一
1.Match 基本实现 功能,比赛列表,球队信息 数据表初始化: 比赛列表: 球队一 比分 球队二 比赛时间 韩国 1:2 澳大利亚 15-01-31 17:00 从SQL思考,如何完成上面的查询: ...
- Oracle 11g RAC 环境打PSU补丁的详细步骤
首先重要的事情说三遍:操作之前还是自己先看文档!操作之前还是自己先看文档!!操作之前还是自己先看文档!!! 把11.2.0.4 RAC 环境打PSU补丁的步骤详细记录一下,方便参考. 环境:11.2. ...
随机推荐
- BZOJ-1085:骑士精神 (迭代加深 + A*搜索)
题意:给定一个5*5的棋盘,上面有白马给妈给12匹,以及一个空格.问是否能在15步内有给定棋盘转移到目标棋盘. 如果可以,输出最小步数. 否则输出-1: 思路:由于步数比较小,我们就直接不记录状态vi ...
- 异常检测(Anomaly detection): 异常检测算法(应用高斯分布)
估计P(x)的分布--密度估计 我们有m个样本,每个样本有n个特征值,每个特征都分别服从不同的高斯分布,上图中的公式是在假设每个特征都独立的情况下,实际无论每个特征是否独立,这个公式的效果都不错.连乘 ...
- 9、Python复杂数据类型(list、tuple、set、dict)
一.列表(list):[a1,a2],可变数据类型 1.序列: 序列是基类类型,序列扩展类型包括:字符串.元组和列表 序列都可以进行的操作包括索引,切片,加,乘,检查成员. 此外,Python已经内置 ...
- postgres主从基于流复制
环境: CentOS Linux release 7.6.1810 (Core) 内核版本:3.10.0-957.10.1.el7.x86_64 node1:192.168.216.130 node2 ...
- CORS 跨域 node |XMLHttpRequest 跨域提交数据 node
node服务端 app.post('/getdata',function(req,res,next){ req.setEncoding('utf8'); res.setHeader('Access-C ...
- 利用GitHub+Node.js+Hexo搭建个人博客
本篇是自己在搭建Hexo博客平台时的一个过程记录.(2019.9.13实测有效) GitHub 账号注册 因为此文所搭建的个人博客是基于GitHub平台服务的,所以首先是注册GitHub,当然已有账号 ...
- LeetCode 785. Is Graph Bipartite?
原题链接在这里:https://leetcode.com/problems/is-graph-bipartite/ 题目: Given an undirected graph, return true ...
- php之大文件分段上传、断点续传
前段时间做视频上传业务,通过网页上传视频到服务器. 视频大小 小则几十M,大则 1G+,以一般的HTTP请求发送数据的方式的话,会遇到的问题:1,文件过大,超出服务端的请求大小限制:2,请求时间过长, ...
- touchz,mkdir,vi的区别
touchz:创建空白文档 mkdir:创建一个目录 vi : 创建一个编辑状态的空文档,保存退出后创建成功.
- 菜鸟教程C++(一)
一.C++基本语法 C++程序可以定义为对象的集合,这些对象可以通过调用彼此的方法进行交互. 对象:对象具有状态和行为.例如:一只狗的状态:颜色.名称.品种等,行为:摇动.叫唤等.对象是类的实例. 类 ...