首頁 php教程 php手册 从零开始之ecshop基础篇(19)

从零开始之ecshop基础篇(19)

Jun 13, 2016 am 10:17 AM
ecshop 入口 減負 功能 基礎 實現 開始 文件 框架 目錄

(为入口文件减负,将入口文件实现的功能,挪到框架的基础类中)

在框架目录增加Framework.class.php

计划:将需要初始化的公共功能,分模块,形成框架基础类的各个方法,分别调用执行,则可以完成项目的初始化功能。

使用静态的方法类完成:(看成功能的集合,而不是图纸设计对象;练习静态使用)

注意,对魔术常量的处理

dirname()函数可以取得一个地址中的路径部分

2
3
'

2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
/**
 * 初始化路径常量
 */      }

 

注意:将保存请求参数的变量,让在所有地方都可以被访问到。

2
3
4
5
6
7
8
9
10
11
12
13
14
            }

注意:需要将保存配置信息的数组,全局化。

2
3
4
5
6
7
8
9
/**
 * 初始化配置文件
 */      }

因此,使用时,应该找到全局的config变量:

在初始化默认平台时:

2
define(

 

2
3
4
5
6
7
8
9
10
11
12
13
14
        $action_name();

 

此时自动加载功能:

有函数的实现专程了 类静态方法的实现

但是,PHP只认识一个叫__autoload()的函数,也就是php不能找到这个函数了。

处理方法:

告知php,在你需要找自动加载函数时,找我们定义的自动加载方法即可。

将一个普通函数(或者方法),注册成自动加载功能函数

利用一个php函数:spl_autoload_register();将普通函数(方法)注册成自动加载

参数,需要注册的函数或者方法

参数函数:函数名即可,使用一个字符串即可

参数方法:类(对象)和方法名。使用一个数组,第一个元素类名,第二个元素方法名

spl_autoload_register(array('Framework','userAutoload));

2
3
4
5
6
7
 * 注册自动加载方法
 */     spl_autoload_register( }

注意:自动加载的方法应该是公共的。

2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
 * 注册自动加载方法
 */     spl_autoload_register( }
 
   * 自动加载方法
  */               FRAME_PATH .          FRAME_PATH .          FRAME_PATH .     );            } 
                }   
                }
  }

在入口文件,加载Framework.class.php框架基础类,运行run()程序运转

index.php

2
3
4
5
6

判断管理员登陆状态

是否登陆标识(状态)

 

应该如何保存登陆标识?

保存登陆标识的数据特征:

总结:需要一个在同一个浏览器的多次请求间可以将数据传递(共享)处理方案。

难点就在于,php程序(凡事b/s,基于http协议),所有资源的最大生命周期就是脚本周期。

在浏览器上记录数据,最核心的解决方案。

cookie,session,会话技术。

 

 

setcookie()即可完成

setcookie('名字','值')

application/controller/back/AdminController.class.php

indexAction();

 

2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
    session_start();
                    $result = $model_admin->checkByCookie();
                            }             jump(        }
    }
    }

 

setcookie(名,值,有效期,有效目录,有效域名)

setcookie第二个,只能字符串

setcookie('name',array('itcast','php'))

2
3
4
$arr = setcookie(setcookie(

此时,在获取该变量时:

$_COOKIE['info']就变成一个有2个元素的数组

$_POST['info'] = array()

默认,浏览器关闭,也称临时cookie

利用setcookie的第三个参数,则可以被配置:使用一个时间戳,来表示有效期

time()获得当前的时间戳。做加减,得到其他时间的时间戳。

典型的设置方法

2
3
4
5
6

 

 

2
3
4
5
'//但是,浏览器端的还是itcast

cookie是保存浏览器端,php通过发出命令,才能在浏览器上保存数据。

浏览器上的cookie

利用firebug上网络面板,监控浏览器发出的请求与接到的响应:

在响应数据内,应该将数据发送的浏览器端,告知浏览器保存该cookie变量:

服务器,利用响应数据的一部分(响应头),将设置的cookie的信息,发送到浏览器:

在浏览器发送的请求数据中将浏览器认为有效的cookie携带到服务器端。

此时,服务器接收的该请求,发现存在cookie数据,利用这个数据,形成$_COOKIE数组,供用户脚本使用

 

 

session与cookie,所解决的问题是相同的。

得到可以在同一个浏览器的多次请求,将数据传递一个方法。

cookie劣势:

数据直接存储在浏览器端,两个显著的问题:

方案:

在服务器上,保存数据。

如何保证数据可以在浏览器的多次请求间传递,并且区分浏览器。

在服务器端,为每个来访的浏览器端,都建一个独立的数据空间。为每个数据空间分配一个唯一的标识,让浏览器保存这个唯一的标识。浏览器每次请求时,携带标识过来,利用标识确定唯一的数据空间

总结:

session技术:将会话数据保存在服务器端,是浏览器端保存存储数据空间标识,浏览器请求时携带标识,服务器负责利用标识,在相应的存储空间内做数据处理。

 

session_start()可以开启

利用预定义变量$_SESSION变量进行操作。增,删,改,查都在$_SESSION上完成。

2
3
4
5
6
7
8

Tips;session技术时基于cookie技术,需要在cookie保存标识

在开启session时,服务器会为浏览器分配一个保存sessionID(session的标识)的cookie变量,保存到浏览器端。

Tips:是一个整站有效的cookie变量

在浏览器的接下来的请求中,都是携带该cookie变量,sessionID到服务器端:

 

默认的:php以文件的形式,保存每个独立的数据空间的。被保存在,服务器端系统的临时目录内。

文件名,以当前的sessionID命名,保证空间唯一性。

可见,保存的时候是学历恶化的结果。

两个基本步骤:

 

 

只有$_SESSION的元素下表才能是数值型的。

2

 

unset($_SESSION['key']);删除$_SESSION内的一个元素

如果删除所有的session数据呢?

$_SESSION = array();

不对的:unset($_SESSION);,不会导致session数据丢失,php内部的session机制,还可以找到已经存在的处理好的session数据,将其写到session数据空间内。

删除session相关的存储文件

session_destroy()函数可以完成

2

但是,删除文件,$_SESSION数组内的数据还在:

但是,在执行session_destroy()后,脚本周期后的写操作,则不执行。

 

如何完全删除一个session的全部数据?

文件,$_SESSION,cookie内的sessionID变量

session_destory();

$_SESSION = array();

setcookie('PHPSESSID','',time() - 1);

 

典型的通过执行session_start()完成

支持,在配置文件中,自动开启

但是,session如果重复开启,则会报告一个错误:

典型的将错误屏蔽了即可

 

 

可以被配置:

session.save_handler php使用的session数据的处理的方式

可以改成user,表示用户自定义

session.save_path

 

 

存储位置不同

敏感度低,需要永久保存的数据,存到cookie内(用户体验)

安全性高,会话周期内存在的数据,保存到session内(数据合法性,合理性,完整性)

session可以保存各种数据类型

 

典型的将登陆验证标识,保存到session中:

application/controller/back/AdminController.class.php

2
3
4
5
6
7
8
9
10
11
12
            jump(    jump(}

 

application/controller/back/IndexController.class.php

2
3
4
5
6
7
8
            jump(        
    }   
}

 

 

记录登陆状态

在登陆成功后,判断是否选择了保存登陆信息:

application/controller/back/AdminController.class.php

signinAction()

2
3
4
    

记录什么格式:

保密,可以被验证

不能保存,后台登陆的信息

至少要成对,可以被验证

设计成:

admin_id

处理过的密码(在md5的基础上,再加密处理)

2
3
4
5
        setcookie(}

application/controller/back/IndexController.class.php

indexAction()

2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
        $result = $model_admin->checkByCookie();
                    $session_start();
            }         jump(    }
}

模型

在AdminModel内增加一个checkByCookie()方法:

application/model/AdminModel.class.php

2
3
4
5
6
7
8
9
10
                }
        db->fetchRow($sql);
}
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

如何評估Java框架商業支援的性價比 如何評估Java框架商業支援的性價比 Jun 05, 2024 pm 05:25 PM

評估Java框架商業支援的性價比涉及以下步驟:確定所需的保障等級和服務等級協定(SLA)保證。研究支持團隊的經驗和專業知識。考慮附加服務,如昇級、故障排除和效能最佳化。權衡商業支援成本與風險緩解和提高效率。

GateToken(GT)幣是什麼? GT幣功能及代幣經濟學介紹 GateToken(GT)幣是什麼? GT幣功能及代幣經濟學介紹 Jul 15, 2024 pm 04:36 PM

GateToken(GT)币是什么?GT(GateToken)是GateChain的链上原生资产,也是Gate.io的官方平台币。GT币的价值与Gate.io及GateChain生态的发展息息相关。什么是GateChain?GateChain诞生于2018年,是Gate.io所推出的新一代高性能公链。GateChain专注于保护用户的链上资产安全,并提供便捷的去中心化交易服务。GateChain的目标是构建一个企业级安全高效的去中心化数字资产储存、分发和交易生态系統。Gatechain具有独创的

PHP 框架的學習曲線與其他語言框架相比如何? PHP 框架的學習曲線與其他語言框架相比如何? Jun 06, 2024 pm 12:41 PM

PHP框架的學習曲線取決於語言熟練度、框架複雜性、文件品質和社群支援。與Python框架相比,PHP框架的學習曲線較高,而與Ruby框架相比,則較低。與Java框架相比,PHP框架的學習曲線中等,但入門時間較短。

PHP 框架的輕量級選項如何影響應用程式效能? PHP 框架的輕量級選項如何影響應用程式效能? Jun 06, 2024 am 10:53 AM

輕量級PHP框架透過小體積和低資源消耗提升應用程式效能。其特點包括:體積小,啟動快,記憶體佔用低提升響應速度和吞吐量,降低資源消耗實戰案例:SlimFramework創建RESTAPI,僅500KB,高響應性、高吞吐量

如何為不同的應用場景選擇最佳的golang框架 如何為不同的應用場景選擇最佳的golang框架 Jun 05, 2024 pm 04:05 PM

根據應用場景選擇最佳Go框架:考慮應用類型、語言特性、效能需求、生態系統。常見Go框架:Gin(Web應用)、Echo(Web服務)、Fiber(高吞吐量)、gorm(ORM)、fasthttp(速度)。實戰案例:建構RESTAPI(Fiber),與資料庫互動(gorm)。選擇框架:效能關鍵選fasthttp,靈活Web應用選Gin/Echo,資料庫互動選gorm。

Java框架學習路線圖:不同領域中的最佳實踐 Java框架學習路線圖:不同領域中的最佳實踐 Jun 05, 2024 pm 08:53 PM

針對不同領域的Java框架學習路線圖:Web開發:SpringBoot和PlayFramework。持久層:Hibernate和JPA。服務端響應式程式設計:ReactorCore和SpringWebFlux。即時計算:ApacheStorm和ApacheSpark。雲端運算:AWSSDKforJava和GoogleCloudJava。

Powertoys的目的是什麼? Powertoys的目的是什麼? Apr 03, 2025 am 12:10 AM

PowerToys是微軟推出的免費工具集合,旨在提升Windows用戶的生產力和系統控制。它通過獨立模塊提供功能,如FancyZones管理窗口佈局和PowerRename批量重命名文件,使用戶工作流程更順暢。

如何在 Golang 中並發讀取和寫入檔案? 如何在 Golang 中並發讀取和寫入檔案? Jun 05, 2024 pm 06:12 PM

並發讀取檔案:建立goroutine並發讀取資料區塊,使用管道通訊協調;並發寫入檔案:使用goroutine寫入數據,用互斥鎖保護寫入操作。

See all articles