PHP 세션은 어떻게 작동합니까? (“어떻게 사용 되나요?”가 아님)


127

세션 파일은 일반적으로 /tmp/서버에 저장 되고 이름이 지정 sess_{session_id}됩니다. 나는 내용을보고 있었고 실제로 어떻게 작동하는지 알 수 없습니다.

파일에서 변수 이름과 내용을 쉽게 가져올 수 있습니다. 그러나 PHP는 어떤 세션이 누구에게 속하는지 어떻게 알 수 있습니까?

session_id는 완전히 임의의 것으로 보이며 하나의 IP 주소에 여러 명의 사용자가있을 수 있으며, 하나 이상의 브라우저 창이 열려 있으면 각 사용자가 여러 개의 세션을 가질 수 있습니다.

어떻게 작동합니까?


답변:


202

일반적인 상황에서 :

  • 세션 ID는 세션이 생성 될 때 사용자에게 전송됩니다.
  • 쿠키에 저장됩니다 (기본적으로 PHPSESSID).
  • 해당 쿠키는 브라우저가 각 요청마다 서버로 전송합니다.
  • 서버 (PHP)는 session_id가 포함 된 쿠키를 사용하여 해당 파일에 해당하는 파일을 확인합니다.

세션 파일의 데이터는 $_SESSION직렬화 (즉, 직렬화 와 같은 기능을 가진 문자열로 표시 )의 내용입니다 . 그리고 파일이 PHP에 의해로드 될 때 직렬화되지 않고 $_SESSION배열 을 채 웁니다 .


때로는 세션 ID가 쿠키에 저장되지 않고 URL로 전송되기도하지만 요즘은 매우 드 rare니다.


자세한 내용 은 설명서 의 세션 처리 섹션에서 유용한 정보를 얻을 수 있습니다.

예를 들어, 세션 ID 전달에 대한 페이지가 있는데, 여기에는 세션 ID가 페이지에서 페이지로, 쿠키를 사용하여 또는 URL로 전달되는 방식과 이에 영향을주는 구성 옵션이 설명되어 있습니다.


5
기본 앱의 모바일 장치는 세션을 어떻게 정상적으로 처리합니까? 세션 ID를 저장 하시겠습니까? 아니면 OAuth가 제공 되었습니까?
Adam Waite

13

PHP 세션은 어떻게 작동합니까

  • 먼저 PHP a86b10aeb5cd56434f8691799b1d9360는 개별 세션에 대해 16 바이트 길이의 고유 식별자 번호 (예 : 32 개의 16 진수 문자열로 저장 )를 만듭니다.

  • PHPSESSID 쿠키는 해당 고유 식별 번호를 사용자의 브라우저로 전달하여 해당 번호를 저장합니다.

  • sess_ 접두사 (예 : sess_a86b10aeb5cd56434f8691799b1d9360.) 와 동일한 고유 식별 번호 이름으로 서버에 새 파일이 작성됩니다 .

  • 브라우저는 각 요청과 함께 해당 쿠키를 서버로 보냅니다.

  • PHP가 PHPSESSID 쿠키 (각 요청마다)에서 고유 한 식별 번호를 얻는 경우, PHP는 임시 디렉토리를 검색하여 해당 번호를 파일 이름과 비교합니다. 둘 다 동일하면 기존 세션을 검색하고, 그렇지 않으면 해당 사용자에 대한 새 세션을 생성합니다.

사용자가 브라우저를 닫거나 사이트를 떠나면 세션이 손상됩니다. 서버는 또한 소정의 세션 시간 기간이 만료 된 후에 세션을 종료한다. 다음은 PHP가 세션을 처리하는 데 사용하는 간단한 메커니즘 단계입니다. 이 기사가 PHP SESSION의 작동 방식을 이해하는 데 도움이되기를 바랍니다.

자세한 내용은이 기사를 참조하십시오. PHP 세션은 어떻게 작동합니까


그러나 특정 사이트 (일명 세션에서)에 로그인 한 경우 새 탭을 엽니 다 mysite.com/cart. 또한 "Hello Joe Doe, 5 개의 메시지, 여기 장바구니 목록이 있습니다."라는 세션 정보가 표시됩니다. – 그러나이 빈 탭에 관한 브라우저가 왜 GET-Request와 함께 Session-ID를 전송합니까? 빠른 업데이트 : 아, 답을 찾았습니다 : +)
Frank Nocke

예를 들어, 사용자가 로그인하여 자신의 프로필에 도착한 경우 다른 사용자의 프로필에 액세스하도록 url 매개 변수를 변경하는 것보다 세션 ID가 어떻게이를 방지 할 수 있습니까?
Andrewboy

4

세션 ID는 실제로 무작위이며 구성에 따라 쿠키 또는 URL로 전달됩니다. 일부 URL에서이 PHPSESSID = xxxx를 이미 보았을 수 있으며 해당 이름의 쿠키도 있습니다.


2

PHP의 세션은 session_start () 함수를 사용하여 시작됩니다. setcookie () 함수와 같이 session_start () 함수는 페이지에서 빈 줄을 포함하여 모든 HTML 앞에 와야합니다. 그것은 다음과 같이 표시됩니다 <?php session_start( );?><html><head> ....... 등등으로 session_start () 함수 (이 실제로 클라이언트 측에 저장되는 유일한 세션 정보 인 사용자의 컴퓨터에 쿠키에 임의의 세션 ID 저장을 생성합니다. ) 쿠키의 기본 이름은 PHPSESSID이지만 서버의 PHP 구성 파일에서 변경할 수 있지만 (대부분의 호스팅 회사는 쿠키를 그대로 둡니다.) PHP 코드에서 세션 ID를 참조하려면 다음을 참조하십시오. 변수 $ PHPSESSID (쿠키 이름입니다. 쿠키에서 기억하십니까?)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.