本文讲解php session本质上如何工作,以下是实现的步骤:
1.session在php以扩展的形式加载在php的内核中,我们可以为它是php的一个扩展.
当session扩展被加载,php将调用内核函数来处理session,也就是接口或者函数来读取和写入session数据.
默认的,php将会按处理的文件的方式来存储和读写session.
php也提供自定义的方法来处理session数据,我们可以使用session_set_save_handler()来注册处理方法.
与此同时,php将会检查session_auto_start是否在配置文件中设置为on,如果是的话,php将会调用内部函数来自动创建session.
2.当php创建session,它将会先检查session id是否已经存在在cookie,GET和POST数据中.
如果不存在,也就意味着这是用户第一次访问网站,php将会自动调用
session_create_id()函数来创建一个唯一的sessionid,然后php将会把这个session id通过设置http响应头发送到客户端,php也可以把session id作为一个参数放在url上或者把它放在一个隐藏域里,但这需要在php.ini中把
session.use_trans_sid选项设置为true.
相反的,如果session id已经存在了,php将会做以下事情:
a.从cookie中取得session id
b.调用save_handler的接口来打开存储有session的文件
c. 如果不能读取对应的session id,它将会生成一个新的sessionid
d.注册 SESSION和 _HTTP_SESSION_VARS_GLOBAL变量, SESSION和 _HTTP_SESSION_VARS_GLOBAL是一个数组
e.php将会调用save_handler的读接口来读取session数据,如果你存储session数据在一个文件中的话,那么就会在一个文件中读取session数据,
如果把session数据存在数据库的话,将会在数据库中读取session数据,并且把他们保存在$_SESSION变量中.
3.最终,当一个请求完成,php将会调用内部函数来获取$_SESSION的值,然后会通过php的session_encode()函数来序列化他们,之后可能会调用save_handler的写接口来存储session数据.
以上就是关于php session的基本的实现.
欢迎扫描下方二维码关注微信订阅号:byte,每天原创php干货分享
或
加入php达人QQ群:180687735
或
加php大牛微信:771023738
扫描二维码关注微信订阅号:byte,每天原创php干货分享