찾다
php教程php手册Php session内部执行流程的再次剖析

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

Jun 06, 2016 pm 08:10 PM
phpsession내부분석하다구현하다상표프로세스

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

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

  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内部执行流程的再次剖析

성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

뜨거운 도구

MinGW - Windows용 미니멀리스트 GNU

MinGW - Windows용 미니멀리스트 GNU

이 프로젝트는 osdn.net/projects/mingw로 마이그레이션되는 중입니다. 계속해서 그곳에서 우리를 팔로우할 수 있습니다. MinGW: GCC(GNU Compiler Collection)의 기본 Windows 포트로, 기본 Windows 애플리케이션을 구축하기 위한 무료 배포 가능 가져오기 라이브러리 및 헤더 파일로 C99 기능을 지원하는 MSVC 런타임에 대한 확장이 포함되어 있습니다. 모든 MinGW 소프트웨어는 64비트 Windows 플랫폼에서 실행될 수 있습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

Dreamweaver Mac版

Dreamweaver Mac版

시각적 웹 개발 도구

DVWA

DVWA

DVWA(Damn Vulnerable Web App)는 매우 취약한 PHP/MySQL 웹 애플리케이션입니다. 주요 목표는 보안 전문가가 법적 환경에서 자신의 기술과 도구를 테스트하고, 웹 개발자가 웹 응용 프로그램 보안 프로세스를 더 잘 이해할 수 있도록 돕고, 교사/학생이 교실 환경 웹 응용 프로그램에서 가르치고 배울 수 있도록 돕는 것입니다. 보안. DVWA의 목표는 다양한 난이도의 간단하고 간단한 인터페이스를 통해 가장 일반적인 웹 취약점 중 일부를 연습하는 것입니다. 이 소프트웨어는

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구