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

标签: PHP | 发表时间:2013-07-31 05:33 | 作者:360weboy
出处:http://www.blogread.cn/it/

标签:   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的源代码,我想就不贴出来了。

您可能还对下面的文章感兴趣:

  1. 浅析http协议、cookies和session机制、浏览器缓存 [2012-12-11 21:57:16]
  2. 你必须了解的Session的本质 [2012-11-13 13:52:34]
  3. 如何设置一个严格30分钟过期的Session [2012-01-16 00:02:50]
  4. 在Express和Socket.IO中使用session [2011-10-14 13:52:02]
  5. PHP Session学习笔记 [2011-09-13 23:30:00]
  6. IFrame带来的Session问题 [2011-06-01 23:34:12]
  7. 深入理解PHP原理之Session Gc的一个小概率Notice [2011-04-02 14:13:20]
  8. (oracle)11g与10g中alter session权限差异 [2009-11-08 17:07:07]
  9. PHP Session的一个警告 [2009-10-29 21:31:40]
  10. 关于session和memcache的若干问题 [2009-10-21 22:15:16]

相关 [php session 内部] 推荐:

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

- - IT技术博客大学习
标签:   session.    近期再次分析了php session内部的执行流程,我将在这篇文章中简要地概括出php内部关于session的执行步骤.    首先php中的session其实就是作为一个扩展载入到php内核中的. 我们可以将它理解成一个扩展就可以了. 当session扩展被载入时,php会调用内部核心函数来获取处理session的save_handler - 也就是存储读取session数据的接口类或者函数.

PHP Session学习笔记

- 张大糊涂 - 标点符
在web开发中,session是个非常重要的概念. Session一般译作会话,Session是一种基于HTTP协议的用以增强web应用能力的机制或者说一种方案,它不是单指某种特定的动态页面技术,而这种能力就是保持状态,也可以称作保持会话. 在许多动态网站的开发者看来,session就是一个变量,而且其表现像个黑洞,他只需要将东西在合适的时机放进这个洞里,等需要的时候再把东西取出来.

session fixation攻击

- - 互联网 - ITeye博客
什么是session fixation攻击. Session fixation有人翻译成“Session完成攻击”,实际上fixation是确知和确定的意思,在此是指Web服务的会话ID是确知不变的,攻击者为受害着确定一个会话ID从而达到攻击的目的. 在维基百科中专门有个词条 http://en.wikipedia.org/wiki/Session_fixation,在此引述其攻击情景,防范策略参考原文.

Zookeeper的Session

- - 行业应用 - ITeye博客
介绍一下基于zookeeper的一些API的编程. 在此之前,我们先来熟悉一下相关知识:. Zookeeper的Session:. (1)客户端和server间采用长连接. (2)连接建立后,server产生session ID(64位)返还给客户端. (3)客户端定期发送ping包来检查和保持和server的连接.

Session机制解析

- - ITeye博客
虽然session机制在web应用程序中被采用已经很长时间了,但是仍然有很多人不清楚session机制的本质,以至不能正确的应用这一技术. 本文将详细讨论session的工作机制并且对在Java web application中应用session机制时常见的问题作出解答. 二、HTTP协议与状态保持.

session和cookie详解

- - ITeye博客
摘要:虽然session机制在web应用程序中被采用已经很长时间了,但是仍然有很多人不清楚session机制的本质,以至不能正确的应用这一 技术. 本文将详细讨论session的工作机制并且对在Java web application中应用session机制时常见的问题作出解答. 二、HTTP协议与状态保持.

nginx + memcached session 同步

- - 企业架构 - ITeye博客
squid 缓存疑问 问题归纳:. 1 squid 缓存的数据,何时过期,如何判断缓存的数据已经过期,如何把最新的数据缓入squid 并且替换掉旧的内容. 2 如何判断数据是否应该被缓存. 3 校验失败时,是否给出缓存中旧的内容. 上面的几个问题  都可以通过 squid中的 refresh_pattern 配置项 找到答案.

session深入解读

- - CSDN博客推荐文章
林炳文Evankaka原创作品. 转载请注明出处 http://blog.csdn.net/evankaka. 摘要:虽然session机制在web应用程序中被采用已经很长时间了,但是仍然有很多人不清楚session机制的本质,以至不能正确的应用这一技术. 本文将详细讨论session的工作机制并且对在Java web application中应用session机制时常见的问题作出解答.

PHP导出excel

- syeye - scofield PHP开发-SEO SEM
最近做一个项目,其中涉及到了数据导成excel的功能. 后来使用了 开源的 PHPExcel  http://phpexcel.codeplex.com/ 目前最新版是1.7.6. PHPExcel 可以生成 .xls 和 .xlsx (office2007). 比如设置 excel的title,keywords,description.

PHP框架 Yaf

- Le - 开源中国社区最新软件
Yaf是一个C语言编写的PHP框架,Yaf 的特点: 用C语言开发的PHP框架, 相比原生的PHP, 几乎不会带来额外的性能开销. 所有的框架类, 不需要编译, 在PHP启动的时候加载, 并常驻内存. 更短的内存周转周期, 提高内存利用率, 降低内存占用率. 支持全局和局部两种加载规则, 方便类库共享.