⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 session.c

📁 php-4.4.7学习linux时下载的源代码
💻 C
📖 第 1 页 / 共 4 页
字号:
		if (PS(id)) efree(PS(id));		PS(id) = estrndup(Z_STRVAL_PP(p_name), Z_STRLEN_PP(p_name));	}		RETVAL_STRING(old, 0);}/* }}} *//* {{{ proto bool session_regenerate_id()   Update the current session id with a newly generated one. */PHP_FUNCTION(session_regenerate_id){	if (SG(headers_sent)) {		php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot regenerate session id - headers already sent");		RETURN_FALSE;	}	if (PS(session_status) == php_session_active) {		if (PS(id)) {			efree(PS(id));			PS(id) = NULL;		}			PS(id) = PS(mod)->s_create_sid(&PS(mod_data), NULL TSRMLS_CC);		PS(send_cookie) = 1;		php_session_reset_id(TSRMLS_C);				RETURN_TRUE;	}	RETURN_FALSE;}/* }}} *//* {{{ proto string session_cache_limiter([string new_cache_limiter])   Return the current cache limiter. If new_cache_limited is given, the current cache_limiter is replaced with new_cache_limiter */PHP_FUNCTION(session_cache_limiter){	zval **p_cache_limiter;	int ac = ZEND_NUM_ARGS();	char *old;	if (ac < 0 || ac > 1 || zend_get_parameters_ex(ac, &p_cache_limiter) == FAILURE)		WRONG_PARAM_COUNT;		old = estrdup(PS(cache_limiter));	if (ac == 1) {		convert_to_string_ex(p_cache_limiter);		zend_alter_ini_entry("session.cache_limiter", sizeof("session.cache_limiter"), Z_STRVAL_PP(p_cache_limiter), Z_STRLEN_PP(p_cache_limiter), PHP_INI_USER, PHP_INI_STAGE_RUNTIME);	}		RETVAL_STRING(old, 0);}/* }}} *//* {{{ proto int session_cache_expire([int new_cache_expire])   Return the current cache expire. If new_cache_expire is given, the current cache_expire is replaced with new_cache_expire */PHP_FUNCTION(session_cache_expire){	zval **p_cache_expire;	int ac = ZEND_NUM_ARGS();	long old;	old = PS(cache_expire);	if (ac < 0 || ac > 1 || zend_get_parameters_ex(ac, &p_cache_expire) == FAILURE)		WRONG_PARAM_COUNT;	if (ac == 1) {		convert_to_string_ex(p_cache_expire);		zend_alter_ini_entry("session.cache_expire", sizeof("session.cache_expire"), Z_STRVAL_PP(p_cache_expire), Z_STRLEN_PP(p_cache_expire), ZEND_INI_USER, ZEND_INI_STAGE_RUNTIME);	}	RETVAL_LONG(old);}/* }}} *//* {{{ static void php_register_var(zval** entry TSRMLS_DC) */static void php_register_var(zval** entry TSRMLS_DC){	zval **value;		if (Z_TYPE_PP(entry) == IS_ARRAY) {		zend_hash_internal_pointer_reset(Z_ARRVAL_PP(entry));		while (zend_hash_get_current_data(Z_ARRVAL_PP(entry), (void**)&value) == SUCCESS) {			php_register_var(value TSRMLS_CC);			zend_hash_move_forward(Z_ARRVAL_PP(entry));		}	} else {		convert_to_string_ex(entry);		if ((strcmp(Z_STRVAL_PP(entry), "HTTP_SESSION_VARS") != 0) &&		   (strcmp(Z_STRVAL_PP(entry), "_SESSION") != 0)) {			PS_ADD_VARL(Z_STRVAL_PP(entry), Z_STRLEN_PP(entry));		}	}}/* }}} *//* {{{ proto bool session_register(mixed var_names [, mixed ...])   Adds varname(s) to the list of variables which are freezed at the session end */PHP_FUNCTION(session_register){	zval  ***args;	int      argc = ZEND_NUM_ARGS();	int      i;	if (argc <= 0)		RETURN_FALSE	else		args = (zval ***)safe_emalloc(argc, sizeof(zval **), 0);		if (zend_get_parameters_array_ex(argc, args) == FAILURE) {		efree(args);		WRONG_PARAM_COUNT;	}	if (PS(session_status) == php_session_none || PS(session_status) == php_session_disabled) {		php_session_start(TSRMLS_C);	}	if (PS(session_status) == php_session_disabled) {		efree(args);		RETURN_FALSE;	}		for (i = 0; i < argc; i++) {		if (Z_TYPE_PP(args[i]) == IS_ARRAY)			SEPARATE_ZVAL(args[i]);		php_register_var(args[i] TSRMLS_CC);	}			efree(args);		RETURN_TRUE;}/* }}} *//* {{{ proto bool session_unregister(string varname)   Removes varname from the list of variables which are freezed at the session end */PHP_FUNCTION(session_unregister){	zval **p_name;	int ac = ZEND_NUM_ARGS();	if (ac != 1 || zend_get_parameters_ex(ac, &p_name) == FAILURE)		WRONG_PARAM_COUNT;		convert_to_string_ex(p_name);		PS_DEL_VARL(Z_STRVAL_PP(p_name), Z_STRLEN_PP(p_name));	RETURN_TRUE;}/* }}} *//* {{{ proto bool session_is_registered(string varname)   Checks if a variable is registered in session */PHP_FUNCTION(session_is_registered){	zval **p_name;	zval *p_var;	int ac = ZEND_NUM_ARGS();	if (ac != 1 || zend_get_parameters_ex(ac, &p_name) == FAILURE)		WRONG_PARAM_COUNT;		convert_to_string_ex(p_name);		if (PS(session_status) == php_session_none)		RETURN_FALSE;	IF_SESSION_VARS() {		if (zend_hash_find(Z_ARRVAL_P(PS(http_session_vars)), 					Z_STRVAL_PP(p_name), Z_STRLEN_PP(p_name)+1, 					(void **)&p_var) == SUCCESS) {			RETURN_TRUE;		}	}	RETURN_FALSE;}/* }}} *//* {{{ proto string session_encode(void)   Serializes the current setup and returns the serialized representation */PHP_FUNCTION(session_encode){	int len;	char *enc;	if (ZEND_NUM_ARGS() != 0) {		WRONG_PARAM_COUNT;	}	enc = php_session_encode(&len TSRMLS_CC);	if (enc == NULL) {		RETURN_FALSE;	}		RETVAL_STRINGL(enc, len, 0);}/* }}} *//* {{{ proto bool session_decode(string data)   Deserializes data and reinitializes the variables */PHP_FUNCTION(session_decode){	zval **str;	if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &str) == FAILURE) {		WRONG_PARAM_COUNT;	}	if (PS(session_status) == php_session_none) {		RETURN_FALSE;	}	convert_to_string_ex(str);	php_session_decode(Z_STRVAL_PP(str), Z_STRLEN_PP(str) TSRMLS_CC);		RETURN_TRUE;}/* }}} *//* {{{ proto bool session_start(void)   Begin session - reinitializes freezed variables, registers browsers etc */PHP_FUNCTION(session_start){	/* skipping check for non-zero args for performance reasons here ?*/	php_session_start(TSRMLS_C);	RETURN_TRUE;}/* }}} *//* {{{ proto bool session_destroy(void)   Destroy the current session and all data associated with it */PHP_FUNCTION(session_destroy){	if (ZEND_NUM_ARGS() != 0) {		WRONG_PARAM_COUNT;	}	if (php_session_destroy(TSRMLS_C) == SUCCESS) {		RETURN_TRUE;	} else {		RETURN_FALSE;	}}/* }}} *//* {{{ proto void session_unset(void)   Unset all registered variables */PHP_FUNCTION(session_unset){	if (PS(session_status) == php_session_none)		RETURN_FALSE;	IF_SESSION_VARS() {		HashTable *ht = Z_ARRVAL_P(PS(http_session_vars));		if (PG(register_globals)) {			uint str_len;			char *str;			ulong num_key;			HashPosition pos;						zend_hash_internal_pointer_reset_ex(ht, &pos);			while (zend_hash_get_current_key_ex(ht, &str, &str_len, &num_key, 						0, &pos) == HASH_KEY_IS_STRING) {				zend_hash_del(&EG(symbol_table), str, str_len);				zend_hash_move_forward_ex(ht, &pos);			}		}				/* Clean $_SESSION. */		zend_hash_clean(ht);	}}/* }}} */PHPAPI void session_adapt_url(const char *url, size_t urllen, char **new, size_t *newlen TSRMLS_DC){	if (PS(apply_trans_sid) && (PS(session_status) == php_session_active)) {		*new = php_url_scanner_adapt_single_url(url, urllen, PS(session_name), PS(id), newlen TSRMLS_CC);	}}static void php_rinit_session_globals(TSRMLS_D){			PS(id) = NULL;	PS(session_status) = php_session_none;	PS(mod_data) = NULL;	PS(http_session_vars) = NULL;}static void php_rshutdown_session_globals(TSRMLS_D){	if (PS(http_session_vars)) {		zval_ptr_dtor(&PS(http_session_vars));		PS(http_session_vars) = NULL;	}	if (PS(mod_data)) {		zend_try {			PS(mod)->s_close(&PS(mod_data) TSRMLS_CC);		} zend_end_try();	}	if (PS(id)) {		efree(PS(id));		PS(id) = NULL;	}	PS(session_status)=php_session_none;}PHP_RINIT_FUNCTION(session){	php_rinit_session_globals(TSRMLS_C);	if (PS(mod) == NULL) {		char *value;		value = zend_ini_string("session.save_handler", sizeof("session.save_handler"), 0);		if (value) {			PS(mod) = _php_find_ps_module(value TSRMLS_CC);		}		if (!PS(mod)) {			/* current status is unusable */			PS(session_status) = php_session_disabled;			return SUCCESS;		}	}	if (PS(auto_start)) {		php_session_start(TSRMLS_C);	}	return SUCCESS;}static void php_session_flush(TSRMLS_D){	if (PS(session_status) == php_session_active) {		PS(session_status) = php_session_none;		zend_try {			php_session_save_current_state(TSRMLS_C);		} zend_end_try();	}}/* {{{ proto void session_write_close(void)   Write session data and end session */PHP_FUNCTION(session_write_close){	php_session_flush(TSRMLS_C);}PHP_RSHUTDOWN_FUNCTION(session){	php_session_flush(TSRMLS_C);	php_rshutdown_session_globals(TSRMLS_C);	return SUCCESS;}/* }}} */static void php_minit_session_globals(php_ps_globals *ps_globals){	ps_globals->save_path = NULL;	ps_globals->session_name = NULL;	ps_globals->id = NULL;	ps_globals->mod = NULL;	ps_globals->mod_data = NULL;	ps_globals->session_status = php_session_none;	ps_globals->http_session_vars = NULL;}PHP_MINIT_FUNCTION(session){#ifdef ZTS	php_ps_globals *ps_globals;	ts_allocate_id(&ps_globals_id, sizeof(php_ps_globals), (ts_allocate_ctor) php_minit_session_globals, NULL);	ps_globals = ts_resource(ps_globals_id);#else 	php_minit_session_globals(&ps_globals);#endif	zend_register_auto_global("_SESSION", sizeof("_SESSION")-1 TSRMLS_CC);	PS(module_number) = module_number; /* if we really need this var we need to init it in zts mode as well! */	PS(session_status) = php_session_none;	REGISTER_INI_ENTRIES();#ifdef HAVE_LIBMM	PHP_MINIT(ps_mm) (INIT_FUNC_ARGS_PASSTHRU);#endif	return SUCCESS;}PHP_MSHUTDOWN_FUNCTION(session){	UNREGISTER_INI_ENTRIES();#ifdef HAVE_LIBMM	PHP_MSHUTDOWN(ps_mm) (SHUTDOWN_FUNC_ARGS_PASSTHRU);#endif	memset(&ps_modules[PREDEFINED_MODULES], 0, (MAX_MODULES-PREDEFINED_MODULES)*sizeof(ps_module *));	return SUCCESS;}PHP_MINFO_FUNCTION(session){	ps_module **mod;	smart_str handlers = {0};	int i;		for (i = 0, mod = ps_modules; i < MAX_MODULES; i++, mod++) {		if (*mod && (*mod)->s_name) {			smart_str_appends(&handlers, (*mod)->s_name);			smart_str_appendc(&handlers, ' ');		}	}	php_info_print_table_start();	php_info_print_table_row(2, "Session Support", "enabled" );	if (handlers.c) {		smart_str_0(&handlers);		php_info_print_table_row(2, "Registered save handlers", handlers.c);		smart_str_free(&handlers);	} else {		php_info_print_table_row(2, "Registered save handlers", "none");	}	php_info_print_table_end();	DISPLAY_INI_ENTRIES();}/* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: * vim600: noet sw=4 ts=4 fdm=marker * vim<600: sw=4 ts=4 */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -