04mvc框架原理(8days)04

session操作

session详细使用

session的开启

session_start();

?

自动开启

session可以自动开启!在当前的脚本执行之前,就完成开启!

通过php的配置文件,修改即可!

?

注意,在session已经开启的情况下再开启,则会触发错误!

?

因此典型的开启session是如下的代码:

?

session_start()前的输出问题

session_start前也不应该有任何的输出,因为可能会使用到响应头信息(类似于header函数)

?

?

$_SESSION的使用

$_SESSION 变量只能是字符串下标数组,不支持数值下标数组!

?

没有session_start时是没有$_SESSION的。

但是语法上可以向一个普通数组一样处理,此时不会对_SESSION内的数据做保存!

?

删除session

删除某个session数据

unset($_SESSION[‘key‘]);

?

删除所有的session数据

注意,不能unset($_SESSION);

但是:

?

删除session的文件

session_destroy()

session_destroy()只删除文件,不处理$_SESSION变量!

因此$_SESSION是有值的!

但是,一旦执行了session_destroy(),则在脚本结束,不会在执行写操作!

?

如何完全删除一个session?

将于当前session相关的数据都删除掉。

$_SESSION: unset,或者$_SESSION=array()

session文件: session_destroy();

cookie中的sessionID: secookie(‘PHPSESSID‘, ‘‘, time()-1);

?

?

服务器端session数据的处理

处理服务器上所保存的session数据的文件

修改保存目录

?

默认的保存在系统临时目录下,windows/temp下:

?

可以通过修改 php的配置。session.save_path进行修改!

注意,php不能自动创建该目录:

?

?

分子目录保存session文件

每个session一个session文件,当请求变多时,session文件增多! 分子目录保存!

?

通过 修改 session.save_path完成!

在temp下,分1级子目录的形式保存:

应该放在t目录下:

使用 sessionid的相应字母完成判断放入到哪个目录!

也是不能自动创建子目录!需要手动创建需要的子目录!

究竟应该创建好多少个?由sessionid字符的可能性!

通过下面两个配置得到:

sessionid的形成算法来决定:

2^5可能性!

?

session数据入库

重写session的存储机制!

?

?

session面临的问题:

1量大!难管理

2服务器多,难共享!

?

将session数据,放置在数据库服务器上进行保存管理!(内存)

?

将session数据存入到数据库中!

?

分析:

需要的工作

提供可以操作数据的功能代码!(读,写,删除)

告知php,在需要的时候,调用我们所定义的代码!

?

增加六个session存储的处理函数(方法)

将以上六个方法设置到session处理的各个部分

利用系统函数,设置session存储所需要的处理器,为当前定义好的 这六个函数:

session_set_save_handler();

?

?

增加一个表保存session数据

保存在文件中变成保存到数据表中!

一个文件对应????一条记录

文件名????????????某个字段,sessionID

文件内容????????字段,当前session数据

完善六个函数,处理session数据

*读,read

在session_start()session执行!

?

?

*写,write

?

*销毁,destroy

在调用了 session_destroy()系统函数时,被自动调用!

负责的功能时,利用当前id,删除当前的session记录!

?

初始化,open

在session开启时执行,负责完成session存储所需要资源的初始化工作!

?

关闭,close

在整体session存储机制结束时,负责释放占用的资源!

?

?

垃圾回收,gc

如果一条记录(一个文件)在多久之内,没有被使用过了,则认为该数据是垃圾!

默认的时间,是1440s秒。24分钟!可以通过php的配置:

?

什么时候执行删除的动作?

在session_start()时,有一定的几率,执行垃圾回收!

默认是 1/1000 千分之一!

可以通过php修改:

?

需要增加一个字段,表示当前记录的最后修改时间

在,插入或者更新时,都要将时间设置成当前的时间戳!

修改写的方法,增加对该字段的处理:

?

此时,需要在垃圾回收函数内,判断哪些记录是否过期,删除!

?

?

?

?

?

session常用处理

session与cookie的区别与联系?

?

session 的 sessionID存在 cookie内!

?

session数据有效期?原因是什么?

浏览器关闭。

原因是保存在浏览器端的sessionid丢失!

默认的sessionID的cookie变量是临时的cookie变量!

?

如何持久化session?

?

持久化sessionID这个cookie变量!

?

使用函数:session_id函数得到当前的sessionID!

?

php还提供一个专门的修改sessionID的cookie变量的函数:

session_set_cookie_params();设置该cookie变量的选项的!

在表示有效期的第一个参数,是时间周期,而不是时间戳!

留意,应该在session-start()之前,就完成cookie选项的设置!

(类似于 session_set_save_handler一样)

?

此外还应该保证,服务器端垃圾判定的时间要与session持久化的时间尽量一致!

session.gc_maxlifetime = 3600;

?

留意,少用!

?

cookie禁用session是否可用?

session是基于cookie的,因此cookie禁用,session不应该可用!

?

如果非要用,也是可以的!

办法是:

url上传递sessionID!

?

此时,需要修改php的配置达到目的:

1,开启对url上传递的支持!将仅仅使用cookie传递sessionid关闭!

?

2,增加url上参数

?

此时php就在浏览器没有cookie使用的情况下,可以采用url进行sessionID的传递:

?

?

注意,php只会自动在html代码的a连接的地址上增加url的传递SessionID

php代码内的url不能自动增加!

?

tip:表单请求时,该参数如何传递!php会自动增加表单项隐藏域,name="PHPSESSID" 值为="session_ID()"

?

无限分类

商品分类!

?

无限分类,就是树状列表的展示!

?

利用 关系型数据库 与 php业务逻辑,实现一个树状分类列表的展示

?

树状列表

?

树:N个节点,与N-1条边,组成一种结构,要求,每一个节点都要有一条边指向另一个节点,除了根!

节点:

边:指明一个节点与另一个节点的之间关系!

?

根节点:

子节点:

父节点:

祖先节点(先辈节点):

后代节点:

兄弟节点:

叶子节点:

?

一个分类就是一个节点!

而分类之间的关系,就是一条边!

?

?

设计分类表

表:关系型!每个分类就是一条记录!

结果:树!每个分类就是一个节点!

?

如何利用关系型表,表示,树结构!

?

?

只要在分类上记录,其边(父类的标识)即可!

?

增加一个字段,保存其父分类的ID即可!

?

两部分:

分类自然信息!

分类的父ID!

?

先从 查询树状列表完成!

先插入模拟数据:

?

根节点的父分类ID为0。没有!

?

简单分类列表

控制器

新增一个后台的分类管理控制器类!

app/controller/back/CategoryController.class.php

增加一个列表动作:

并完成:

?

模型

增加分类表操作模型

并增加一个方法返回所有数据getList

app/model/CategoryModel.class.php

?

视图

展示分类

增加模板!

app/view/back/category_list.html

?

?

其他

增加一个菜单链接,点击请求到当前分类类表动作!

修改menu.html即可!

?

树状分类列表

?

按照级别缩进!

按照上下级关系,对数据排序!

?

排序

单纯按照某个字段排序!

而是应该按照级别关系进行排序!

?

利用 0 先找到顶级根节点。再利用该根节点找其子节点,当找到第一个子节点时,利用该子节点,再找下级节点!直到当前子节点上所有的后代节点都查找到,才会去执行下一个根节点的子节点!

?

如何实现:

典型的递归方式解决!

?

递归点,和递归出口:出口在,如果当前节点没有子节点,则不需要递归调用!

?

编程实现:

按照父分类id,查找子分类的过程!其中一直需要从所有的数据分类中查找!

?

一步:获得所有的分类!放入到数组列表!

二步:在该数组列表内,完成上面的递归查找!

?

确定分类的缩进级别

递归的运行图:

分析发现:

分类应该缩进的级别,与递归找到该分类的函数的调用深度是一致的!

?

?

因此,需要记录递归调用的深度!

?

递归调用一次,深度+1

利用一个参数即可!将参数的值,每次递归时,值被+1:

将深度赋值个当前函数确定的分类即可!

利用级别缩进:

字符串函数:

重复的结果:str_repeat(‘需要重复的字符串‘, 次数);

重复字符串!可将一个字符串重复多少次!

?

?

更新项目简单列表为树状列表

?

控制器

修改获得数据的调用的模型方法

app/controller/back/CategoryController.class.php

模型

增加一个getTreeList方法,获得排序和计算好深度的分类列表数据

app/model/CategoryModel.class.php

在来一个 getTree完成递归:

视图

增加缩进的展示

app/view/back/category_list.html

?

?

结果:

时间: 2024-11-05 18:43:00

04mvc框架原理(8days)04的相关文章

04mvc框架原理(8days)01

面向对象关键字: class public,protected,private static const ? self,parent,static ? extends implements abstract interface final ? new clone ? $this ? ? 介绍项目开发 安装ecshop 解压压缩包后,获取其中upload子目录的所有文件,将其放置到可以被浏览器请求到某个目录(建议改名) 请求,index.php即可! 会自动跳转到安装页面(或者可以请求instal

04mvc框架原理(8days)05

后台的登陆判断 后台几乎所有的动作,在执行前都需要判断是否登录! 应该在所有的后台动作之前都判断呢? 所有的后台控制器在执行时,都需要判断! ? 典型的: 增加每个平台的基础控制器! 写平台下的公共代码! ? 实现: 在后台中: app/controller/back/ 增加: BackPlatformController.class.php 所有的后台都继承自: ? ? ? 将登陆验证的功能,提取到公共位置 ? 使其在每次,得到控制器类对象时,完成对登陆的验证! 在构造方法中: 在后台的公共控

04mvc框架原理(8days)03

页面跳转 header('Location: url'); 优势:在于立即跳转! 劣势:没有办法在跳转前给出提示! ? header功能是,发送响应头信息!相应头信息,是相应信息的一部分!通知浏览器应该做哪些事情的部分!但是要求,相应头信息,要先于响应主体(相应信息的其他部分)先被发送到浏览器! 因此,无论如何也是看不到echo的提示: 甚至,上面的代码会出现语法错误! 默认在于php有个叫:输出缓冲功能,会默认缓存所有的主体输出! ? 因此,编程上建议在使用header函数时,前面不应该有任何

04mvc框架原理(8days)02

框架 实现业务逻辑的基础代码,主要包括: 一:项目的架构模式(MVC) 二:常用的公共操作代码(MySQLDB,文件上传,图片处理,分页,字符串处理,session处理) 应该将以上的代码总结出来,下次可以直接使用! ? ? 几个项目的概念 ? 项目功能: 前台:负责展示项目具体功能的平台称之为前台! 后台:负责功能管理,数据管理的平台称之为后台! ? 工作内容: 程序:负责网站的业务逻辑主体功能实现的工作,程序!(PHP,SQL,JS) 美工:负责设计页面样式!(HTML,CSS,JS) ?

04mvc框架原理(8days)06

增加验证码的工具类 工具类 framework/tool/CaptchaTool.class.php 所有关于验证码的工作:生成,验证 ? 妥善管理所使用到背景图片: 放置在 工具目录: ? ? 展示使用验证码 增加一个控制器动作 实例化该工具类,从而完成展示验证码功能! app/controller/back/AdminController.class.php captchaAction() ? 表单页面的img标签请求该动作 app/view/back/login.html ? 将该动作也设

精体展矿计运界布属点世据真起验青kPswaoY3w

社保划到税务征收,将大大提升社保费的征管效率.税务的征管能力是目前而言最强的,以后税务征收社保不是代收,属于本职了. 之前税局要把社保信息和交个税的工资比对起来有困难!现在好了,个税是自己的,社保也是自己的,比对困难?不存在的! 这一变革,会给那些不给员工上社保.不全额上社保的企业致命一击! 最新案例 前段时间的发改委关于限制特定严重失信人乘坐民航的一则意见--发改财金[2018]385号,其中还有税务总局的联合署名. http://weibo.com/20180408PP/2309279811

而广除还状么林验以适调半去gbQwsadnbQjN

为了从不同环节,尤其与广大使用人群直接关系的环节反映质量状况,对共享自行车投放点.运营仓库.生产企业等不同环节的产品抽查,覆盖了共享自行车从成品出厂到待投放的关键环节. 该负责人称,根据新车投放情况,结合共享自行车行业市场占有分布特点,本次重点抽查了摩拜.ofo.Hellobike三个品牌的产品,占本次抽查批次总数的83.3%.其中,在天津.无锡.武汉.广州.深圳.东莞6个城市抽查了9批次摩拜产品,占产品抽查批次总数的37.5%,抽查批次合格率88.9%,抽查不合格的1批次产品为待投放于广州市的

艰辛五天:Ubuntu14.04+显卡驱动+cuda+Theano环境安装过程

题记:从一开始不知道显卡就是GPU(虽然是学计算机的,但是我真的不知道-脑残如我也是醉了),到搞好所有这些环境前后弄了5天时间,前面的买显卡.装显卡和装双系统见另一篇博客装显卡.双系统,这篇主要记录我怎么配置后面的环境,虽然中间重装Ubuntu三次,后面安装过程也没差别. 基础平台:64-bit,Ubuntu14.04 1.安装NVIDIA驱动(参考技术文章,基本是复制啊,蟹蟹作者~) (1) 在官网下载NVIDIA驱动,根据自己买的型号选择下载,放到 /home/lvxia/ 目录下面,我下载

[转]ubuntu16.04安装teamviewer12依赖包解决

安装teamviewer下载地址:http://www.teamviewer.com/en/download/linux/ 下载的是:teamviewer_12.0.76279_i386.deb 安装时过程: ?  下载 sudo dpkg -i teamviewer_12.0.76279_i386.deb (正在读取数据库 ... 系统当前共安装有 180540 个文件和目录.) 正准备解包 teamviewer_12.0.76279_i386.deb  ... 正在将 teamviewer: