현재 위치: > 최신 기사 목록> PHP의 비 제외 기능을 사용하여 세션 데이터를 복원하는 방법은 무엇입니까? 예제 설명

PHP의 비 제외 기능을 사용하여 세션 데이터를 복원하는 방법은 무엇입니까? 예제 설명

gitbox 2025-09-30

1. 세션이 어떻게 작동하는지

PHP 세션은 고유 한 세션 ID를 사용하여 서버의 사용자 데이터를 저장합니다. 사용자가 요청을 할 때마다 PHP는 세션 ID를 찾고 해당 세션 데이터를로드합니다. 데이터는 일반적으로 $ _session hyperglobal 변수를 통해 액세스됩니다.

PHP는 내부적으로 Serialize 함수를 자동으로 사용하여 객체 또는 배열과 같은 데이터를 문자열 저장소로 변환하고 Unserialize 기능을 사용하여 원래 데이터 유형으로 복원합니다.

그러나 때때로 우리는 이러한 직렬화 된 데이터에 직접 액세스하거나 수동으로 처리하려고하며 비 제외 기능이 특히 중요해집니다.


2. 비 제외 기능에 대한 개요

비 제외 기능은 직렬화 된 문자열을 PHP 변수로 변환하는 데 사용됩니다.

 <span><span><span class="hljs-keyword">mixed</span></span><span> </span><span><span class="hljs-title function_ invoke__">unserialize</span></span><span> ( </span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$data</span></span><span> [, </span><span><span class="hljs-keyword">array</span></span><span> </span><span><span class="hljs-variable">$options</span></span><span> = [] ] )
</span></span>

매개 변수 설명 :

  • $ Data : 사형화 된 문자열.

  • $ 옵션 : 추가 사제화 제어를 제공하는 선택적 매개 변수 (PHP 7+ 지원). 예를 들어, 사막화를 허용하는 클래스를 지정할 수 있습니다.

반품 값 :

  • 성공하면 사형화 된 변수를 반환하고 실패시 False를 반환합니다.


3. 예 : 세션 데이터를 수동으로 직렬화하고 사형화합니다

1 단계 : 세션 데이터 저장을 시뮬레이션합니다

기본 사용자 정보가 포함 된 사용자 객체가 있다고 가정합니다. 객체를 수동으로 직렬화하여 세션에 저장합니다.

 <span><span><span class="hljs-title function_ invoke__">session_start</span></span><span>();

</span><span><span class="hljs-comment">// 사용자 객체를 만듭니다</span></span><span>
</span><span><span class="hljs-class"><span class="hljs-keyword">class</span></span></span><span> </span><span><span class="hljs-title">User</span></span><span> {
    </span><span><span class="hljs-keyword">public</span></span><span> </span><span><span class="hljs-variable">$name</span></span><span>;
    </span><span><span class="hljs-keyword">public</span></span><span> </span><span><span class="hljs-variable">$email</span></span><span>;

    </span><span><span class="hljs-keyword">public</span></span><span> </span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">__construct</span></span><span>(</span><span><span class="hljs-params"><span class="hljs-variable">$name</span></span></span><span>, </span><span><span class="hljs-variable">$email</span></span><span>) {
        </span><span><span class="hljs-variable language_">$this</span></span><span>-&gt;name = </span><span><span class="hljs-variable">$name</span></span><span>;
        </span><span><span class="hljs-variable language_">$this</span></span><span>-&gt;email = </span><span><span class="hljs-variable">$email</span></span><span>;
    }
}

</span><span><span class="hljs-comment">// 사용자 객체를 인스턴스화합니다</span></span><span>
</span><span><span class="hljs-variable">$user</span></span><span> = </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title class_">User</span></span><span>(</span><span><span class="hljs-string">'John Doe'</span></span><span>, </span><span><span class="hljs-string">'[email protected]'</span></span><span>);

</span><span><span class="hljs-comment">// 사용자 객체를 직렬화하고 저장하십시오 session</span></span><span>
</span><span><span class="hljs-variable">$_SESSION</span></span><span>[</span><span><span class="hljs-string">'user_data'</span></span><span>] = </span><span><span class="hljs-title function_ invoke__">serialize</span></span><span>(</span><span><span class="hljs-variable">$user</span></span><span>);
</span></span>

위의 코드에서는 사용자 클래스를 생성하고 사용자 객체 John Doe를 직렬화하고 $ _session [ 'user_data'] 에 저장합니다.

2 단계 : 세션 데이터 복원 (deserialize)

세션에 데이터가 저장되면 후속 요청으로 데이터를 복구 할 수 있습니다. 비 제외 기능을 통해 세션에 저장된 직렬화 된 데이터를 원래 객체 양식으로 복원 할 수 있습니다.

 <span><span><span class="hljs-title function_ invoke__">session_start</span></span><span>();

</span><span><span class="hljs-comment">// 조사하다 session 어떤 것이 있습니까? 'user_data' 데이터</span></span><span>
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-keyword">isset</span></span><span>(</span><span><span class="hljs-variable">$_SESSION</span></span><span>[</span><span><span class="hljs-string">'user_data'</span></span><span>])) {
    </span><span><span class="hljs-comment">// 사제화 session 데이터</span></span><span>
    </span><span><span class="hljs-variable">$user</span></span><span> = </span><span><span class="hljs-title function_ invoke__">unserialize</span></span><span>(</span><span><span class="hljs-variable">$_SESSION</span></span><span>[</span><span><span class="hljs-string">'user_data'</span></span><span>]);

    </span><span><span class="hljs-comment">// 출력 사용자 정보</span></span><span>
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">'Name: '</span></span><span> . </span><span><span class="hljs-variable">$user</span></span><span>-&gt;name . </span><span><span class="hljs-string">'&lt;br&gt;'</span></span><span>;
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">'Email: '</span></span><span> . </span><span><span class="hljs-variable">$user</span></span><span>-&gt;email . </span><span><span class="hljs-string">'&lt;br&gt;'</span></span><span>;
} </span><span><span class="hljs-keyword">else</span></span><span> {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">'No user data found in session.'</span></span><span>;
}
</span></span>

이 코드에서는 먼저 $ _session [ 'user_data']가 존재하는지 확인합니다. 존재하는 경우 비 제외 기능을 사용하여 사용자 객체로 복원 한 다음 해당 객체의 속성을 출력합니다.


4. 비 제외 기능 사용에 대한 메모

보안 문제

비 제외 기능을 사용하는 경우 보안 문제에 특별한주의를 기울여야합니다. 특히 신뢰할 수없는 소스의 데이터를 제조 할 때는 객체 주입 공격으로 이어질 수 있습니다. 이를 통해 공격자는 악의적 인 직렬화 된 데이터를 구성하여 위험한 작업을 수행 할 수 있습니다. 따라서 비 제외 화를 사용할 때 이러한 문제를 피하기 위해 보안 조치를 추가하는 것이 좋습니다.

PHP 7+에서는 허용 _classes 옵션을 설정하여 사형화 된 클래스를 제한 할 수 있습니다. 예를 들어, 제한은 사용자 클래스에만 해조 될 수 있습니다.

 <span><span><span class="hljs-variable">$options</span></span><span> = [</span><span><span class="hljs-string">'allowed_classes'</span></span><span> =&gt; [</span><span><span class="hljs-string">'User'</span></span><span>]];
</span><span><span class="hljs-variable">$user</span></span><span> = </span><span><span class="hljs-title function_ invoke__">unserialize</span></span><span>(</span><span><span class="hljs-variable">$_SESSION</span></span><span>[</span><span><span class="hljs-string">'user_data'</span></span><span>], </span><span><span class="hljs-variable">$options</span></span><span>);
</span></span>

이런 식으로, 사용자 클래스의 객체 만 사막화 할 수있는 반면 다른 클래스는 차단됩니다.

부조화 중 호환성 문제

비생활 화는 교차 버전 또는 교차 서버 PHP 환경에서 호환성 문제를 경험할 수 있습니다. 예를 들어, 클래스가 다른 버전에서 변경되면 사막화가 실패 할 수 있습니다. 이 문제를 피하기 위해 개발자는 특히 간단한 데이터 구조가 관련 될 때 JSON_ENCODEJSON_DECODE를 대안으로 사용할 수 있습니다.