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 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 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의 목표는 기업 수준의 안전하고 효율적인 분산형 디지털 자산 저장, 유통 및 거래 생태계를 구축하는 것입니다. 게이트체인에는 원본이 있습니다.

PHP 프레임워크의 학습 곡선은 다른 언어 프레임워크와 어떻게 비교됩니까? PHP 프레임워크의 학습 곡선은 다른 언어 프레임워크와 어떻게 비교됩니까? Jun 06, 2024 pm 12:41 PM

PHP 프레임워크의 학습 곡선은 언어 숙련도, 프레임워크 복잡성, 문서 품질 및 커뮤니티 지원에 따라 달라집니다. PHP 프레임워크의 학습 곡선은 Python 프레임워크에 비해 높고 Ruby 프레임워크에 비해 낮습니다. Java 프레임워크에 비해 PHP 프레임워크는 학습 곡선이 적당하지만 시작하는 데 걸리는 시간이 더 짧습니다.

PHP 프레임워크의 경량 옵션은 애플리케이션 성능에 어떤 영향을 줍니까? PHP 프레임워크의 경량 옵션은 애플리케이션 성능에 어떤 영향을 줍니까? Jun 06, 2024 am 10:53 AM

경량 PHP 프레임워크는 작은 크기와 낮은 리소스 소비를 통해 애플리케이션 성능을 향상시킵니다. 그 특징은 다음과 같습니다: 작은 크기, 빠른 시작, 낮은 메모리 사용량, 향상된 응답 속도 및 처리량, 리소스 소비 감소 실제 사례: SlimFramework는 500KB에 불과한 REST API를 생성하며 높은 응답성과 높은 처리량을 제공합니다.

다양한 애플리케이션 시나리오에 가장 적합한 golang 프레임워크를 선택하는 방법 다양한 애플리케이션 시나리오에 가장 적합한 golang 프레임워크를 선택하는 방법 Jun 05, 2024 pm 04:05 PM

애플리케이션 시나리오를 기반으로 최고의 Go 프레임워크를 선택하세요. 애플리케이션 유형, 언어 기능, 성능 요구 사항 및 생태계를 고려하세요. Common Go 프레임워크: Gin(웹 애플리케이션), Echo(웹 서비스), Fiber(높은 처리량), gorm(ORM), fasthttp(속도). 실제 사례: REST API(Fiber) 구축 및 데이터베이스(gorm)와 상호 작용. 프레임워크를 선택하세요. 주요 성능을 ​​위해서는 fasthttp를 선택하고, 유연한 웹 애플리케이션을 위해서는 Gin/Echo를, 데이터베이스 상호작용을 위해서는 gorm을 선택하세요.

Java 프레임워크 학습 로드맵: 다양한 분야의 모범 사례 Java 프레임워크 학습 로드맵: 다양한 분야의 모범 사례 Jun 05, 2024 pm 08:53 PM

다양한 분야에 대한 Java 프레임워크 학습 로드맵: 웹 개발: SpringBoot 및 PlayFramework. 지속성 계층: Hibernate 및 JPA. 서버 측 반응형 프로그래밍: ReactorCore 및 SpringWebFlux. 실시간 컴퓨팅: ApacheStorm 및 ApacheSpark. 클라우드 컴퓨팅: Java용 AWS SDK 및 Google Cloud Java.

Golang에서 동시에 파일을 읽고 쓰는 방법은 무엇입니까? Golang에서 동시에 파일을 읽고 쓰는 방법은 무엇입니까? Jun 05, 2024 pm 06:12 PM

동시 파일 읽기: 데이터 블록을 동시에 읽는 고루틴을 생성하고 파이프라인 통신 조정을 사용합니다. 동시 파일 쓰기: 고루틴을 사용하여 데이터를 쓰고 뮤텍스를 사용하여 쓰기 작업을 보호합니다.

PowerToys의 목적은 무엇입니까? PowerToys의 목적은 무엇입니까? Apr 03, 2025 am 12:10 AM

PowerToys는 Windows 사용자를위한 생산성 및 시스템 제어를 향상시키기 위해 Microsoft가 시작한 무료 도구 모음입니다. Fancyzones Management Win

See all articles