20150127--Session入库

image

和涛哥学习MVC

目录

和涛哥学习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原理图

clip_image002

由上图可知,session操作主要是对session的增删改查(session文件的读取与写入)操作,但是由于文件读写操作要实现对服务器的I/O进行开销,如淘宝这种大数据系统,如果采用文本方式保存session数据,那么是无法想象的,另如想统计当前在线人数等信息,使用数据集群共享session数据时,都是很难实现的。

那么如何实现对以上问题的解决呢?

答:Session入库技术

Session入库技术实际就是人为更改session数据读取与写入的位置,如下图所示:

clip_image004

二、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个函数

clip_image006

b)更改session存取方式,并开启session

clip_image008

运行效果:

clip_image010

说明:当系统只有session_start()开启函数时,系统会自动调用open、read、write、close四个函数,当系统中存在session_destroy函数时,系统将自动关闭session文件写入功能,而出发系统中的destroy函数,如下图所示:

代码如下:

clip_image012

clip_image014

c)session系统的gc垃圾回收机制

php系统中,可以在php.ini配置文件中设置gc回收概率,默认系统回收概率1/1000

可以通过更改php.ini中的以下代码,更改回收概率

clip_image016

更改php.ini配置信息,如下

clip_image018

运行效果,如下

clip_image020

以上方式人为更改系统gc垃圾回收概率,但是建议该概率的值为1/1000 ~ 1/5000

3、session入库

a)在open方法中,链接数据库

clip_image022

b)在close方法中,关闭链接资源

clip_image024

c)在read方法中,读取sess_id信息,在read方法中,可以通过参数来调用系统中的session_id

clip_image026

d)在write方法中,实现对session数据库的写入操作

clip_image028

e)在destroy方法中,销毁指定session_id的数据

clip_image030

f)在gc方法中,判断session数据是否过期

可以通过php.ini中的以下参数进行判断

clip_image032

默认session文件过期时间为24分钟,1440秒

判断session数据是否过期

clip_image034

运行效果如下:

clip_image036

原文地址:https://www.cnblogs.com/lifushan/p/5423196.html