참조란 무엇인가요?
PHP에서 인용이란 동일한 변수 내용에 다른 이름으로 액세스하는 것을 의미합니다. 이는 C 포인터와는 다릅니다. 대신 참조는 기호 테이블 별칭입니다. PHP에서는 변수 이름과 변수 내용이 다르기 때문에 동일한 내용이라도 다른 이름을 가질 수 있습니다. 가장 가까운 비유는 Unix의 파일 이름과 파일 자체입니다. 변수 이름은 디렉토리 항목이고 변수 내용은 파일 자체입니다. 참조는 Unix 파일 시스템의 하드링크로 간주될 수 있습니다.
참조의 역할
PHP의 참조를 사용하면 두 변수가 동일한 내용을 가리킬 수 있습니다. 의미:
<?php $a =& $b; ?>
$a와 $b가 동일한 변수를 가리킨다는 의미입니다.
참고:
여기서 $a와 $b는 완전히 동일합니다. $a가 $b를 가리키거나 그 반대도 아니지만 $a와 $b가 같은 위치를 가리킵니다. .
참고:
참조가 있는 배열을 복사해도 해당 값은 역참조되지 않습니다. 배열 값을 함수에 전달할 때도 마찬가지입니다.
참고:
정의되지 않은 변수가 참조로 할당되거나 참조 매개변수로 전달되거나 참조로 반환되면 변수가 자동으로 생성됩니다.
예제 #1 정의되지 않은 변수에 대한 참조 사용
<?php function foo(&$var) { } foo($a); // $a is "created" and assigned to null $b = array(); foo($b['b']); var_dump(array_key_exists('b', $b)); // bool(true) $c = new StdClass; foo($c->d); var_dump(property_exists($c, 'd')); // bool(true) ?>
참조를 반환하는 함수와 new 연산자(PHP 4.0.4 이상 버전)에서 동일한 구문을 사용할 수 있습니다. :
<?php $bar =& new fooclass(); $foo =& find_var($bar); ?>
PHP 5부터 new는 자동으로 참조를 반환하므로 여기서 =&를 사용하는 것은 더 이상 사용되지 않으며 E_STRICT 수준 메시지를 생성합니다.
참고:
& 연산자를 사용하지 않으면 객체의 복사본이 생성됩니다. 클래스에서 $this를 사용하면 클래스의 현재 인스턴스에 적용됩니다. &가 없는 할당은 인스턴스(예: 개체)를 복사하고 $this는 복사본에 적용되지만 항상 원하는 결과는 아닙니다. 성능 및 메모리 소비 문제로 인해 일반적으로 하나의 인스턴스에서만 작업하려고 합니다.
@new와 같은 @ 연산자를 사용하여 생성자에서 오류 메시지를 표시하지 않을 수 있지만 &new 문을 사용할 때는 아무런 효과가 없습니다. 이는 Zend 엔진의 제한 사항이며 구문 분석 오류가 발생합니다.
경고 함수 내에서 전역으로 선언된 변수에 참조가 할당되면 해당 참조는 함수 내에서만 표시됩니다. $GLOBALS 배열을 사용하면 이 문제를 피할 수 있습니다.
예제 #2 함수 내에서 전역 변수 참조
<?php $var1 = "Example variable"; $var2 = ""; function global_references($use_globals) { global $var1, $var2; if (!$use_globals) { $var2 =& $var1; // visible only inside the function } else { $GLOBALS["var2"] =& $var1; // visible also in global context } } global_references(false); echo "var2 is set to '$var2'\n"; // var2 is set to '' global_references(true); echo "var2 is set to '$var2'\n"; // var2 is set to 'Example variable' ?>
전역 $var;을 $var =& $GLOBALS['var'];의 약어로 취급합니다. 따라서 $var에 다른 참조를 할당하면 지역 변수의 참조만 변경됩니다.
참고:
foreach 문에서 참조가 있는 변수에 값을 할당하면 참조된 개체도 변경됩니다.
예제 #3 foreach 문을 사용한 참조
<?php $ref = 0; $row =& $ref; foreach (array(1, 2, 3) as $row) { // do something } echo $ref; // 3 - last element of the iterated array ?>
참조가 수행하는 두 번째 작업은 참조로 변수를 전달하는 것입니다. 이는 함수 내에서 지역 변수를 생성하여 수행되며 해당 변수는 호출 범위에서 동일한 내용을 참조합니다. 예를 들어
<?php function foo(&$var) { $var++; } $a=5; foo($a); ?>
은 $a를 6으로 변경합니다. 이는 foo 함수의 $var 변수가 $a가 가리키는 내용과 동일한 내용을 가리키기 때문입니다.
참조가 하는 세 번째 일은 참조 반환입니다.
참조가 아닌 것
앞서 언급했듯이 참조는 포인터가 아닙니다. 이는 다음 구조가 예상한 효과를 갖지 않음을 의미합니다.
<?php function foo(&$var) { $var =& $GLOBALS["baz"]; } foo($bar); ?>
이렇게 하면 foo 함수의 $var 변수가 함수 호출 시 $bar에 바인딩되었다가 다시 바인딩됩니다. $GLOBALS["baz"] 위에 설정하세요. 함수 foo에는 $bar 변수가 없기 때문에 참조 메커니즘을 통해 $bar를 함수 호출 범위의 다른 변수에 바인딩할 수 없습니다($var로 표시되지만 $var에는 변수 내용만 있고 호출은 없습니다). 기호 테이블 이름-값 바인딩). 함수에 의해 선택된 참조 변수에 대한 참조 반환을 사용할 수 있습니다.

세션 관련 XSS 공격으로부터 응용 프로그램을 보호하려면 다음 조치가 필요합니다. 1. 세션 쿠키를 보호하기 위해 Httponly 및 Secure 플래그를 설정하십시오. 2. 모든 사용자 입력에 대한 내보내기 코드. 3. 스크립트 소스를 제한하기 위해 컨텐츠 보안 정책 (CSP)을 구현하십시오. 이러한 정책을 통해 세션 관련 XSS 공격을 효과적으로 보호 할 수 있으며 사용자 데이터가 보장 될 수 있습니다.

PHP 세션 성능을 최적화하는 방법 : 1. 지연 세션 시작, 2. 데이터베이스를 사용하여 세션을 저장, 3. 세션 데이터 압축, 4. 세션 수명주기 관리 및 5. 세션 공유 구현. 이러한 전략은 높은 동시성 환경에서 응용의 효율성을 크게 향상시킬 수 있습니다.

THESESSION.GC_MAXLIFETIMESETTINGINSTTINGTINGSTINGTERMINESTERMINESTERSTINGSESSIONDATA, SETINSECONDS.1) IT'SCONFIGUDEDINPHP.INIORVIAINI_SET ()

PHP에서는 Session_Name () 함수를 사용하여 세션 이름을 구성 할 수 있습니다. 특정 단계는 다음과 같습니다. 1. Session_Name () 함수를 사용하여 Session_Name ( "my_session")과 같은 세션 이름을 설정하십시오. 2. 세션 이름을 설정 한 후 세션을 시작하여 세션을 시작하십시오. 세션 이름을 구성하면 여러 응용 프로그램 간의 세션 데이터 충돌을 피하고 보안을 향상시킬 수 있지만 세션 이름의 독창성, 보안, 길이 및 설정 타이밍에주의를 기울일 수 있습니다.

세션 ID는 로그인시, 민감한 작업 전에 및 30 분마다 정기적으로 재생되어야합니다. 1. 세션 고정 공격을 방지하기 위해 로그인 할 때 세션 ID를 재생합니다. 2. 안전성을 향상시키기 위해 민감한 작업 전에 재생성. 3. 정기적 인 재생은 장기 활용 위험을 줄이지 만 사용자 경험을 평가해야합니다.

Session_SET_COOKIE_PARAMS () 함수를 통해 PHP에서 세션 쿠키 매개 변수 설정을 달성 할 수 있습니다. 1)이 기능을 사용하여 만료 시간, 경로, 도메인 이름, 보안 플래그 등과 같은 매개 변수를 설정하십시오. 2) call session_start ()를 호출하려면 매개 변수를 발효시킵니다. 3) 사용자 로그인 상태와 같은 요구에 따라 매개 변수를 동적으로 조정합니다. 4) 보안을 향상시키기 위해 안전하고 httponly 플래그 설정에주의를 기울이십시오.

PHP에서 세션을 사용하는 주요 목적은 다른 페이지간에 사용자의 상태를 유지하는 것입니다. 1) 세션은 Session_Start () 함수를 통해 시작되어 고유 한 세션 ID를 생성하고 사용자 쿠키에 저장합니다. 2) 세션 데이터는 서버에 저장되므로 로그인 상태 및 쇼핑 카트 컨텐츠와 같은 다른 요청간에 데이터를 전달할 수 있습니다.

하위 도메인 간의 세션을 공유하는 방법? 공통 도메인 이름에 대한 세션 쿠키를 설정하여 구현. 1. 세션 쿠키 도메인을 서버 측에서 .example.com으로 설정하십시오. 2. 메모리, 데이터베이스 또는 분산 캐시와 같은 적절한 세션 저장 방법을 선택하십시오. 3. 쿠키를 통해 세션 ID를 전달하면 서버는 ID를 기반으로 세션 데이터를 검색하고 업데이트합니다.


핫 AI 도구

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

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

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

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

인기 기사

뜨거운 도구

SublimeText3 Linux 새 버전
SublimeText3 Linux 최신 버전

Atom Editor Mac 버전 다운로드
가장 인기 있는 오픈 소스 편집기

SecList
SecLists는 최고의 보안 테스터의 동반자입니다. 보안 평가 시 자주 사용되는 다양한 유형의 목록을 한 곳에 모아 놓은 것입니다. SecLists는 보안 테스터에게 필요할 수 있는 모든 목록을 편리하게 제공하여 보안 테스트를 더욱 효율적이고 생산적으로 만드는 데 도움이 됩니다. 목록 유형에는 사용자 이름, 비밀번호, URL, 퍼징 페이로드, 민감한 데이터 패턴, 웹 셸 등이 포함됩니다. 테스터는 이 저장소를 새로운 테스트 시스템으로 간단히 가져올 수 있으며 필요한 모든 유형의 목록에 액세스할 수 있습니다.

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)
