目录
和涛哥学习MVC三.......................................................................................................... 1
一、简介.......................................................................................................................... 2
1、什么是session?.................................................................................................. 2
2、为什么需要会话控制技术?.................................................................................. 2
3、session原理图...................................................................................................... 2
二、session入库的实现.................................................................................................... 3
1、要使用到的知识点:............................................................................................ 3
2、代码实现.............................................................................................................. 4
a)定义基本操作的6个函数.............................................................................. 4
b)更改session存取方式,并开启session.......................................................... 4
c)session系统的gc垃圾回收机制..................................................................... 5
3、session入库......................................................................................................... 6
a)在open方法中,链接数据库......................................................................... 6
b)在close方法中,关闭链接资源..................................................................... 6
c)在read方法中,读取sess_id信息,在read方法中,可以通过参数来调用系统中的session_id 7
d)在write方法中,实现对session数据库的写入操作........................................ 7
e)在destroy方法中,销毁指定session_id的数据.............................................. 7
f)在gc方法中,判断session数据是否过期....................................................... 7
三、整合session入库到MVC项目中................................................................................ 8
1、设计数据库如下图所示......................................................................................... 8
2、在Core文件夹中创建Session.class.php做为核心入库文件..................................... 9
3、创建Session类..................................................................................................... 9
4、创建session入库的6个方法............................................................................... 10
5、继承Model模型,链接数据库,更改session存取方式........................................ 10
6、由于open与close不需要进行相关操作,可以为其设置默认返回值true.............. 10
7、read读方法实现................................................................................................. 11
8、write写方法实现................................................................................................ 11
9、destroy删除方法实现......................................................................................... 11
10、gc垃圾回收方法实现........................................................................................ 11
11、在Core/Application.class.php中更改session存取机制......................................... 12
四、购物车实现.............................................................................................................. 12
1、采用数据库方式存储购物车................................................................................ 12
2、数据库架构........................................................................................................ 12
product 产品表................................................................................................. 12
shopcar 购物车表............................................................................................. 13
order 订单表................................................................................................. 13
一、简介
1、什么是session?
答:一种会话控制技术
2、为什么需要会话控制技术?
1)早期互联网采用HTTP协议发送请求,但由于HTTP是无状态的请求,所以网站管理者无法获知当前用户的用户轨迹。
2)Cookie技术
相当于超市的会员卡
3)Session技术
相当于超市发卡但是保留实体卡,只发给我们卡号(Session_ID)
3、session原理图
由上图可知,session操作主要是对session的增删改查(session文件的读取与写入)操作,但是由于文件读写操作要实现对服务器的I/O进行开销,如淘宝这种大数据系统,如果采用文本方式保存session数据,那么是无法想象的,另如想统计当前在线人数等信息,使用数据集群共享session数据时,都是很难实现的。
那么如何实现对以上问题的解决呢?
答:Session入库技术
Session入库技术实际就是人为更改session数据读取与写入的位置,如下图所示:
二、session入库的实现
1、要使用到的知识点:
bool session_set_save_handler ( callable $open , callable $close , callable $read , callable $write , callable $destroy , callable $gc )
功能:实现对session读取存取方式的函数
$open : 打开session读写操作
$close : 关闭session读写操作
$read : 读取session文件(读取数据库中的session信息)
$write : 写入session文件(写入session信息到数据库中)
$destroy : 销毁session文件(删除session信息)
$gc : 当session文件过期时,系统自动删除该文件(删除过期session记录)
2、代码实现
a)定义基本操作的6个函数
b)更改session存取方式,并开启session
运行效果:
说明:当系统只有session_start()开启函数时,系统会自动调用open、read、write、close四个函数,当系统中存在session_destroy函数时,系统将自动关闭session文件写入功能,而出发系统中的destroy函数,如下图所示:
代码如下:
c)session系统的gc垃圾回收机制
php系统中,可以在php.ini配置文件中设置gc回收概率,默认系统回收概率1/1000
可以通过更改php.ini中的以下代码,更改回收概率
更改php.ini配置信息,如下
运行效果,如下
以上方式人为更改系统gc垃圾回收概率,但是建议该概率的值为1/1000 ~ 1/5000
3、session入库
a)在open方法中,链接数据库
b)在close方法中,关闭链接资源
c)在read方法中,读取sess_id信息,在read方法中,可以通过参数来调用系统中的session_id
d)在write方法中,实现对session数据库的写入操作
e)在destroy方法中,销毁指定session_id的数据
f)在gc方法中,判断session数据是否过期
可以通过php.ini中的以下参数进行判断
默认session文件过期时间为24分钟,1440秒
判断session数据是否过期
运行效果如下: