Php session内部执行流程的再次剖析
标签: ?? 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内部执行流程的再次剖析, 感谢原作者分享。

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

PHP 8.4 帶來了多項新功能、安全性改進和效能改進,同時棄用和刪除了大量功能。 本指南介紹如何在 Ubuntu、Debian 或其衍生版本上安裝 PHP 8.4 或升級到 PHP 8.4

Visual Studio Code,也稱為 VS Code,是一個免費的原始碼編輯器 - 或整合開發環境 (IDE) - 可用於所有主要作業系統。 VS Code 擁有大量針對多種程式語言的擴展,可以輕鬆編寫

JWT是一種基於JSON的開放標準,用於在各方之間安全地傳輸信息,主要用於身份驗證和信息交換。 1.JWT由Header、Payload和Signature三部分組成。 2.JWT的工作原理包括生成JWT、驗證JWT和解析Payload三個步驟。 3.在PHP中使用JWT進行身份驗證時,可以生成和驗證JWT,並在高級用法中包含用戶角色和權限信息。 4.常見錯誤包括簽名驗證失敗、令牌過期和Payload過大,調試技巧包括使用調試工具和日誌記錄。 5.性能優化和最佳實踐包括使用合適的簽名算法、合理設置有效期、

字符串是由字符組成的序列,包括字母、數字和符號。本教程將學習如何使用不同的方法在PHP中計算給定字符串中元音的數量。英語中的元音是a、e、i、o、u,它們可以是大寫或小寫。 什麼是元音? 元音是代表特定語音的字母字符。英語中共有五個元音,包括大寫和小寫: a, e, i, o, u 示例 1 輸入:字符串 = "Tutorialspoint" 輸出:6 解釋 字符串 "Tutorialspoint" 中的元音是 u、o、i、a、o、i。總共有 6 個元

本教程演示瞭如何使用PHP有效地處理XML文檔。 XML(可擴展的標記語言)是一種用於人類可讀性和機器解析的多功能文本標記語言。它通常用於數據存儲

靜態綁定(static::)在PHP中實現晚期靜態綁定(LSB),允許在靜態上下文中引用調用類而非定義類。 1)解析過程在運行時進行,2)在繼承關係中向上查找調用類,3)可能帶來性能開銷。

PHP的魔法方法有哪些? PHP的魔法方法包括:1.\_\_construct,用於初始化對象;2.\_\_destruct,用於清理資源;3.\_\_call,處理不存在的方法調用;4.\_\_get,實現動態屬性訪問;5.\_\_set,實現動態屬性設置。這些方法在特定情況下自動調用,提升代碼的靈活性和效率。
