PHP源码分析之session.auto_start配置分析

  作者:zhanhailiang 日期:2014-10-20

应用分析

日常开发中,php.ini配置session.auto_start=0默认关闭会话时如果想开启会话需要调用session_start:

<?php
 
session_start();
//...

内核分析

通过查到源码,可知session_start定义如下:

1881 /* {{{ proto bool session_start(void)
1882    Begin session - reinitializes freezed variables, registers browsers etc */
1883 static PHP_FUNCTION(session_start)
1884 {
1885         /* skipping check for non-zero args for performance reasons here ?*/
1886         php_session_start(TSRMLS_C);
1887 
1888         if (PS(session_status) != php_session_active) {
1889                 RETURN_FALSE;
1890         }
1891         RETURN_TRUE;
1892 }

可以看到session_start本质是通过调用php_session_start来开启会话。

如果修改php.ini中session.auto_start=1默认开启session时通过源码可知在RINIT(即请求初始化)中自动调用php_session_start来开启会话:

2129 static PHP_RINIT_FUNCTION(session) /* {{{ */
2130 {
2131         php_rinit_session_globals(TSRMLS_C);
2132 
2133 +-----  8 lines: if (PS(mod) == NULL) {--------------------------------------------------------------------------------------------------------------------------------
2141                 
2142 +-----  8 lines: if (PS(serializer) == NULL) {-------------------------------------------------------------------------------------------------------------------------
2150                 
2151 +-----  5 lines: if (PS(mod) == NULL || PS(serializer) == NULL) {------------------------------------------------------------------------------------------------------
2156                         
2157         if (PS(auto_start)) {
2158                 php_session_start(TSRMLS_C);
2159         }
2160 
2161         return SUCCESS;
2162 }
2163 /* }}} */

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。