>  기사  >  백엔드 개발  >  PHP는 세션 사용을 최적화합니다.

PHP는 세션 사용을 최적화합니다.

WBOY
WBOY원래의
2016-08-08 09:27:131590검색

php의 세션 확장은 컨테이너가 php_session.h에서 인터페이스를 구현하는 한 모든 컨테이너에 세션 데이터를 저장할 수 있습니다.

typedef struct ps_module_struct {
	const char *s_name;
	int (*s_open)(PS_OPEN_ARGS);
	int (*s_close)(PS_CLOSE_ARGS);
	int (*s_read)(PS_READ_ARGS);
	int (*s_write)(PS_WRITE_ARGS);
	int (*s_destroy)(PS_DESTROY_ARGS);
	int (*s_gc)(PS_GC_ARGS);
	char *(*s_create_sid)(PS_CREATE_SID_ARGS);
} ps_module;

session.auto_start = 1이 php.ini에 정의된 경우 세션 확장은 요청 초기화 단계(rinit) 동안 s_open 및 s_read 데이터를 호출합니다.
php 페이지에서 session_start()가 호출되면(첫 번째 호출만 적용됨) 세션 확장은 s_open 및 s_read 데이터도 호출합니다.
그러나 세션 데이터가 포함되지 않은 일부 페이지의 경우 세션 데이터를 읽으면 디스크 작업이나 네트워크 작업 등 성능 낭비가 발생합니다.
따라서 세션 데이터가 포함된 페이지와 세션 데이터가 포함되지 않은 페이지를 다르게 처리하는 방법을 찾아야 하지만 처리 코드는 일관되어야 합니다.
session.auto_start = 1을 제거하고 session.auto_start = 0으로 변경하고 쿠키에 session_name이 없는 요청에 대해서는 session_start() 호출을 지연시키는 것이 아이디어입니다.
쿠키에 session_name이 없으면 호출할 때. session_start(), 세션 확장은 자동으로 session_id를 생성하고 Set-Cookie 헤더를 전송합니다. 헤더 정보는 페이지가 콘텐츠를 출력하기 전에 출력되거나 페이지 콘텐츠를 출력 버퍼에 넣어 출력을 지연해야 합니다.
최종 구현은 다음과 같습니다.
auto_prepend_file:

<?php
if (isset($_COOKIE[session_name()])) {
	define('SESSION_STARTED', true);
	@session_start();
} else {
	ob_start();
}

auto_append_file:
<?php
if (!defined('SESSION_STARTED') && $_SESSION) {
	$session_copy = $_SESSION;
	@session_start();
	if (!$_SESSION) {
		$_SESSION = $session_copy;
	}
	ob_end_flush();
}

위 내용은 내용의 측면을 포함하여 PHP 세션 최적화의 사용법을 소개하고 있으며, PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.

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