您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

Php session内部执行流程的再次剖析

2024/3/12 10:44:28发布27次查看
标签: session ? ?近期再次分析了php session内部的执行流程,我将在这篇文章中简要地概括出php内部关于session的执行步骤。 ? ?首先php中的session其实就是作为一个扩展载入到php内核中的。我们可以将它理解成一个扩展就可以了。当session扩展被载入时
标签: session
? ?近期再次分析了php session内部的执行流程,我将在这篇文章中简要地概括出php内部关于session的执行步骤。
? ?首先php中的session其实就是作为一个扩展载入到php内核中的。我们可以将它理解成一个扩展就可以了。当session扩展被载入时,php会调用内部核心函数来获取处理session的save_handler - 也就是存储读取session数据的接口类或者函数。 php默认地是通过写或者读取文件来处理session数据的。但是,php也提供了user自定义的方式 - 也就是自定义处理session数据的接口,可以通过session_set_save_handler函数来注册。关于这方面,后续我会详细写一篇文章。同时,php会判断session.auto_start是否已经在配置中默认开启。如果开启了session.auto_start,php便会调用内部函数自动开启session功能。以上,就是session扩展被载入时php内部所处理的两件事情。
? ?接下来,php在启动session的时候,如果发现请求的cookies,get,post中不存在session id,说明这是客户端的第一次访问,php会自动调用php_session_create_id函数创建一个唯一的session id,并且在http response中通过set-cookie头部发送给客户端保存(在客户端cookie被禁用的情况下,php也可以自动将session id添加到url参数中以及form的hidden 字段中,这需要将php.ini中的session.use_trans_sid设为开启,也可以在运行时调用ini_set来设置这个配置项)。相反,如果请求中已经携带了session id,那么php会做以下几件事情:
? ?从cookie中获取session id
? ?调用save_handler的open接口打开存储上下文
? ?如果读取不到对应的session id, 生成新的session id
? ?注册$_session和$_http_session_vars全局变量,$_session和$_http_session_vars会被注册为同一个数组
? ?接着调用save_handler的read接口读取session数据,如果是使用files方式存储的话,就从文件中读取session数据,数据库方式的话,就从数据库中读取。 读取完毕后会把读到的数据写入到$_session数组中
? ?最后,当一个请求执行完毕时,php会调用内部函数获取$_session数组中的值,然后调用php_session_encode将其系列化后,通过调用save_handler的write接口将session系列化数据存储起来。
? ?以上大致按照顺序列出了php session的内部执行流程。至于php的源代码,我想就不贴出来了。
您可能还对下面的文章感兴趣:
浅析http协议、cookies和session机制、浏览器缓存 [2012-12-11 21:57:16] 你必须了解的session的本质 [2012-11-13 13:52:34] 如何设置一个严格30分钟过期的session [2012-01-16 00:02:50] 在express和socket.io中使用session [2011-10-14 13:52:02] php session学习笔记 [2011-09-13 23:30:00] iframe带来的session问题 [2011-06-01 23:34:12] 深入理解php原理之session gc的一个小概率notice [2011-04-02 14:13:20] (oracle)11g与10g中alter session权限差异 [2009-11-08 17:07:07] php session的一个警告 [2009-10-29 21:31:40] 关于session和memcache的若干问题 [2009-10-21 22:15:16]
原文地址:php session内部执行流程的再次剖析, 感谢原作者分享。
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product