쿠키와 세션은 무엇이며 서로 어떤 관련이 있습니까?


86

전문적으로 쿠키와 세션을 이해하려고 노력하고 있습니다. 브라우저가 서버에 연결될 때 서버는 클라이언트 브라우저 쿠키 폴더에 "phpsessid"가있는 쿠키를 "붙여 넣기"위해 브라우저에 "요청"합니다.

이제 "phpsessid"가 있으므로 클라이언트가 서버에 들어가면 브라우저는 "phpsessid"를 서버에 보내고 서버는 tmp 폴더를 살펴보고 일치하는 항목이 있으면 사용자가 가지고있는 모든 데이터를로드합니다. 이 클라이언트이지만 프로세스와 다소 혼란 스럽습니다.

세션과 쿠키를 만드는 과정을 이해하는 데 도움을 줄 수 있다면 감사하겠습니다.


무슨 일이 일어나고 있는지 이미 알고있는 것 같습니다. 어떤 부분에 대해 깨닫고 싶습니까? HTTP / 쿠키 부분 또는 PHP가 세션 저장소를로드하는 방법?
mario

브라우저가 phpsessid와 함께 저장하는 쿠키는 세션과 쿠키를 생성하기 위해 클라이언트를 식별하는 phpsessid입니까?
Blanktext

브라우저에있는 쿠키에는 서버에 "hey I know this chap"을 알려주는 php 세션 ID가 포함되어 있으며 서버는 세션 데이터 (예 : / tmp /)를
가져 와서

예, 알고 있습니다.하지만이 "phpsessid"가 세션과 쿠키를 만들기 전에 클라이언트를 식별하는 데 사용하고 있습니까?이 phpsessid가 쿠키 데이터와 클라이언트 컴퓨터 내부와 서버 tmp 폴더의 세션 파일 내부에 포함되어 있습니까? ?
Blanktext

답변:


173

이것을 살펴 보자 :

쿠키 세션 은 브라우저가 생성하는 서로 다른 요청간에 애플리케이션의 상태를 보존하는 두 가지 방법입니다. 예를 들어, StackOverflow 에서 페이지를 요청할 때마다 로그인 할 필요가 없다는 것은 그들 덕분입니다.

쿠키

쿠키는 키 = 값 쌍으로 데이터를 보유하는 작은 데이터 비트 (최대 길이 4KB)입니다.

name=value; name2=value2

이것은 JavaScript 또는 HTTP 헤더를 사용하는 서버를 통해 설정됩니다 .

쿠키에는 만료 날짜 시간이 설정되어 있습니다 (예 : HTTP 헤더 사용).

Set-Cookie: name2=value2; Expires=Wed, 19 Jun 2021 10:18:14 GMT

그러면 브라우저가 name2값 이라는 이름의 쿠키를 설정하게 value2되며 약 9 년 후에 만료됩니다.

쿠키는 사용자가 콘텐츠를 쉽게 조작 할 수 있으므로 매우 안전하지 않은 것으로 간주 됩니다. 그렇기 때문에 항상 쿠키 데이터의 유효성을 검사 해야 합니다 . 쿠키에서 얻는 것이 반드시 기대 한 것이라고 가정하지 마십시오.

쿠키는 일반적으로 브라우저에서 사용자 이름과 특수 해시가 전송되는 로그인 상태를 유지하는 데 사용되며 서버는 액세스를 승인하기 위해 데이터베이스에 대해 쿠키를 확인합니다.

쿠키는 세션 생성 에도 자주 사용됩니다 .

세션

세션은 약간 다릅니다. 각 사용자는 쿠키 또는 GET 변수에 의해 유효성 검사를 위해 서버로 다시 전송되는 세션 ID를 얻 습니다 .

세션은 일반적으로 수명이 짧기 때문에 응용 프로그램 간의 임시 상태를 저장하는 데 이상적입니다. 사용자가 브라우저를 닫으면 세션도 만료됩니다.

변수 자체가 서버에 유지되기 때문에 세션은 쿠키보다 더 안전한 것으로 간주됩니다 . 작동 방식은 다음과 같습니다.

  1. 서버가 세션을 엽니 다 (HTTP 헤더를 통해 쿠키 설정)
  2. 서버는 세션 변수를 설정합니다.
  3. 클라이언트 변경 페이지
  4. 클라이언트는 1 단계의 세션 ID와 함께 모든 쿠키를 보냅니다.
  5. 서버는 쿠키에서 세션 ID를 읽습니다.
  6. 서버는 데이터베이스 (또는 메모리 등)의 목록에서 세션 ID와 일치합니다.
  7. 서버가 일치하는 항목을 찾고 이제 $_SESSION수퍼 글로벌에서 사용할 수있는 변수를 읽습니다 .

PHP가 일치하는 항목을 찾지 못하면 새 세션을 시작하고 1-7 단계를 반복합니다.

민감한 정보는 서버에 보관되기 때문에 세션에 저장할 수 있지만 사용자가 안전하지 않은 Wi-Fi를 통해 로그인 한 경우 세션 ID가 여전히 도난 당할 수 있습니다. (공격자는 쿠키를 스니핑하고 쿠키를 자신의 것으로 설정할 수 있으며, 변수 자체는 볼 수 없지만 서버는 공격자를 사용자로 식별합니다).


그게 요점입니다. 두 주제에 대한 PHP 매뉴얼에서 더 많은 것을 배울 수 있습니다.


1
그렇다면 세션이 작동하려면 쿠키를 켜야합니까?
bigpotato

1
@Edmund : 대부분의 경우 그렇습니다. 당신은 할 수있다, 그러나, 세션 ID가 SESSION_ID 모든 페이지 (추가 될 필요가 있음을 의미하는 것이다 (GET 변수를 통해 전송되도록 설정할 hello.php?sid=cbe709ac7bed98f7ecb89713)
MADARA의 유령

Android 또는 iPhone 장치에서 브라우저를 닫는다는 것은 정확히 무엇을 의미합니까? 앱을 중지 하시겠습니까? 장치를 끄시겠습니까? 모든 탭을 닫고 종료 하시겠습니까? 기타
Vandervals

2
@SurajJain "remember me"쿠키가 아니라면 더 오래 지속될 것입니다.
MADARA의 유령

4
다른 질문 : 사용자가 브라우저를 닫을 때 서버가이 세션 ID를 삭제하도록이 이벤트에 의해 서버에 어떻게 알림이 전송됩니까? 아니면 얼마 후 자동으로 만료됩니까?
user2774480
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.