쿠키 대 세션


189

몇 달 전에 PHP를 사용하기 시작했습니다. 내 웹 사이트에 대한 로그인 시스템을 만들기 위해 쿠키와 세션 및 차이점에 대해 읽었습니다 (쿠키는 사용자의 브라우저에 저장되고 서버의 세션에 저장됩니다). 그때 나는 쿠키를 선호했고 쿠키를 좋아하지 않는 사람은 누구입니까?! 내 학사 졸업 프로젝트. 그러나 내 응용 프로그램의 큰 부분을 수행 한 후 사용자의 ID를 저장하는 특별한 경우 세션이 더 적합하다고 들었습니다. 그래서 배심원이 왜 세션 대신 쿠키를 사용했는지 물어 보면 어떻게 될까요? 나는 그 이유가 있습니다 (사용자에 대한 내부 정보를 저장할 필요가 없습니다).? 아니면 그 이상입니까?
사용자 ID를 유지하기 위해 쿠키를 사용할 때의 장점 / 단점에 대해 말씀해 주시겠습니까?

StackOverflow에 감사합니다!


2
두 방법 모두 데이터를 저장합니다 . 쿠키는 클라이언트 측에서, 즉 방문자의 장치 저장에서 수행됩니다. 세션은 클라이언트 측에 고유 ID와 서버 측에 모든 실제 데이터 만 저장한다는 점에서 현명한 "확장"입니다. 클라이언트의 쿠키에서 고유 ID를 받으면 서버에로드 할 데이터를 알고 있습니다. 대부분의 경우 세션이 필요합니다. 그런데 github.com/delight-im/PHP-Cookie 를 사용하면 더 현대적인 방식으로 관리 할 수 ​​있습니다 .
caw

따로, 워드 프레스 코어는 몇 년 전 세션 사용을 중단했으며 이제는 쿠키 만 사용 합니다 . 흥미 롭군 로드 밸런싱 된 서버 집합에보다 쉽게 ​​배포하고 세션 가비지 수집으로 인한 임의의 로그 아웃을 줄이기 위해 그렇게했는지 궁금합니다.
Simon East

답변:


230

이 개념은 웹 방문자를 위해 페이지로드 전체에 지속적 데이터를 저장하는 것입니다. 쿠키는이를 클라이언트에 직접 저장합니다. 세션은 쿠키를 일종의 키로 사용하여 서버 측에 저장된 데이터와 연결합니다.

실제 값은 클라이언트에서 숨겨지고 데이터가 만료되어 유효하지 않은시기를 제어하므로 세션을 사용하는 것이 좋습니다. 쿠키를 기반으로 한 경우 사용자 (또는 해커)는 쿠키 데이터를 조작 한 다음 사이트에 대한 요청을 재생할 수 있습니다.

편집 : 단순성 이외의 쿠키를 사용하면 이점이 없다고 생각합니다. 이런 식으로보세요 ... 사용자가 자신의 ID #를 알아야 할 이유가 있습니까? 일반적으로 아니요라고 말하면 사용자는이 정보가 필요하지 않습니다. 정보 제공은 알아야 할 필요성에 따라 제한되어야합니다. 사용자가 쿠키를 변경하여 다른 ID를 가지면 어떻게 응답합니까? 보안 위험이 있습니다.

세션이 모두 분노하기 전에 기본적으로 내 구현이있었습니다. 클라이언트에 고유 한 쿠키 값을 저장하고 해당 쿠키 값과 함께 데이터베이스에 영구 데이터를 저장했습니다. 그런 다음 페이지 요청에서 해당 값을 일치시키고 클라이언트가 무엇을 제어하지 못하게하는 영구 데이터를 보유했습니다.


29
@JiminyCricket 나는 그것이 사실이라고 생각하지 않습니다 ... 그렇다면 아무도 현재 로그인 한 사용자를 저장하기 위해 세션 변수를 사용하지 않을 것입니다. 엄청난 보안 위험이 있습니다. 일반적으로 세션 ID가 클라이언트 시스템에 쿠키로 저장되고 서버 측에서 세션 데이터와 일치하는지 확인하십시오. 서버는 일반적으로 쿠키 값 대신 IP 주소를 통해 세션을 제어하지 않습니다.
John M.

1
필자는 최근 쿠키를 다시 사용하기 시작했습니다. 순전히 동일한 세션에서 실행중인 다른 페이지가있는 경우 세션이 페이지를로드하지 않기 때문에 session_write_close();필요할 때 각 페이지 앞에 머리말을 붙이지 않는 한 세션이 페이지를로드하지 않기 때문 입니다. 고유 한 ID를 롤링하고 일반 쿠키와 일치시키는 것은 그리 어렵지 않았으며 모든 페이지를 멋지게 유지합니다.
Brian Leishman

인증을 위해 세션을 사용해야한다고 생각하십니까? 보안 위험이 있습니까? 해커는 어떻게 세션 ID를 변경하려고합니까? 서버가 어떻게 응답합니까 (추정 된 session-id가 유효하다고 가정)?
O-BL

세션을 하이재킹 할 수있는 세션을 사용한 다음 2FA를 사용하십시오.
Zakir Sajib

120

이 두 가지를 구별하기위한 기본 아이디어.

세션:

  1. IDU는 서버에 저장됩니다 (예 : 서버 측)
  2. 더 안전합니다 (1 때문에)
  3. 사용자가 브라우저를 닫으면 만료를 설정할 수 없습니다. 세션 변수가 만료됩니다. (현재는 PHP에서 기본값으로 24 분 동안 저장됩니다)

쿠키:

  1. IDU는 웹 브라우저에 저장됩니다 (예 : 클라이언트 측)
  2. 해커가 정보에 접근하여 정보를 얻을 수 있기 때문에 안전하지는 않습니다 (1 때문에).
  3. 만료 설정 가능 (자세한 내용은 setcookies () 참조 )

계산, 측정, 쿼리 등의 변수와 같은 단기 정보 / 값을 저장해야하는 경우 세션이 선호됩니다.

쿠키는 사용자 계정과 같은 장기 정보 / 값을 저장해야 할 때 선호됩니다 (2 일 동안 컴퓨터를 종료하더라도 계정은 여전히 ​​로그인됩니다). 쿠키가 대부분의 상황에서 채택되지 않았기 때문에 쿠키에 대한 많은 예를 생각할 수 없습니다.


6
주의 : 이것은 좋은 대답이 아닙니다. 그것은 꽤 괜찮아 시작하지만 일을 혼란스럽게하고 잘못된 것으로 끝납니다. 이것은 세션 대 쿠키 설명이 아닙니다. 세션 대 세션 + 세션 쿠키 설명입니다. 명시된 이유로 쿠키 만 선호하지 않습니다. 명시된 이유로 세션 + 세션 쿠키가 선호됩니다.
markus

또 다른 실수는 PHP 구성을 통해 세션 수명에 영향을 미친다는 것입니다.
markus

1
세션은 여전히 ​​사용자 브라우저에서 쿠키를 설정
하므로이

세션 만료는 모든 응용 프로그램에서 쉽게 설정할 수 있습니다. 세 번째 포인트가 잘못되었습니다. 또한 쿠키 대 세션에 저장할 수있는 데이터의 양을 잊었습니다. 더 중요한 점입니다
saran3h

1
IDU는 무엇을 의미합니까?
Simon East

45
SESSIONS ENDS WHEN USER CLOSES THEIR BROWSER,

COOKIES END DEPENDING ON THE LIFETIME YOU SET FOR IT. SO THEY CAN LAST FOR YEARS

이것이 당신이 선택한 가장 큰 차이점입니다.

ID를 오랫동안 기억하려면 쿠키를 사용해야합니다. 그렇지 않으면 웹 사이트 가이 방문에 대해서만 사용자를 인식하도록하려면 세션이 진행됩니다.

세션은 PHP 서버가 생성 할 파일에 저장됩니다. 어떤 파일이 어떤 사용자를위한 것인지 기억하기 위해, PHP는이 세션 파일 ID를 보유하는 사용자 브라우저에 쿠키를 설정하여 다음 방문에서 PHP가이 파일을 읽고 세션을 다시로드합니다.

이제 php는 기본적으로 모든 간격마다 세션을 지우고 세션 명명 규칙에 따라 자동 만료됩니다. 또한 브라우저는 브라우저가 닫히거나 히스토리가 지워지면 세션 ID를 보유하는 쿠키를 유지하지 않습니다.

요즘 브라우저는 LocalStorage, SessionStorage 및 Javascript 코드가 데이터를 컴퓨터에 저장하여 사용자를 기억하는 데 사용할 수있는 다른 webdb 엔진과 같은 다른 종류의 스토리지 엔진도 지원한다는 점에 유의해야합니다. 예를 들어 Facebook에서 Javascript 콘솔을 열고 "localStorage"를 입력하면 Facebook없이 쿠키없이 사용자를 기억하기 위해 사용하는 모든 변수가 표시됩니다.


16
실제로 기본적으로 세션은 사용자가 브라우저를 닫을 때까지 지속되지만 세션의 0을 세션 지속 시간 (초)으로 변경하거나 php.ini 파일에서 php.ini 파일에서 변경할 수 있습니다. session_set_cookie_params () 사용
DOK

1
도움이되는 정보, 더 많은 답변을 얻을 수있는 질문 .. 좋아요, 다시 감사합니다 DOK!
Nadjib Mami 2016

1
또한 단일 실패 지점 세션 파일이 작성 될 수 있음을 명심하십시오. 프록시, IP 스위처 또는 좀비를 통해 가장 작은 dos 스타일 공격이 발생할 때 서버 하드 디스크 또는 ssd에 세션 파일이 작성됩니다. 읽기 쓰기를 유지할 수 없으면 사이트가 다운됩니다.
Shawn E Carter

"사용자가 브라우저를 닫을 때 세션이 진행됩니다"1. 사용자가 페이지에서 awya를 탐색하면 브라우저를 닫지 않고 되돌아갑니다. 2. 동일한 사이트를 가리키는 여러 개의 브라우저 창 / 탭이 열려 있으면 어떻게합니까? 직장의 일부 웹 응용 프로그램은이 상황에서 혼란스러워하지만 사용하는 쿠키 유형을 모르겠습니다.
jcansell

1
잘 @jcansell, 쿠키는 대부분의 아마이 경우에, 자바 스크립트를 사용하여 데이터를 저장하는 로컬 스토리지 / 세션 스토리지 사용이 웹 어플리케이션 멀티 탭으로 혼동 또는 멀리 이동되지 않습니다
Zalaboza

20

로그인 한 사용자를 인식하기 위해 #ID를 쿠키로 저장하면 실제로 관련이없는 사용자에게 데이터가 표시됩니다. 또한 제 3자가 브라우저에서 임의의 ID를 쿠키 데이터로 설정하려고하면 실제로는 아닌 동안 사용자임을 서버에 알릴 수 있습니다. 보안이 부족합니다.

쿠키를 사용했으며 이미 말했듯이 대부분의 프로젝트를 완료했습니다. 쿠키 이외에도 오랫동안 머무를 수있는 특권이 있지만 세션은 더 빨리 종료됩니다. 따라서이 경우 세션이 적합하지 않습니다. 실제로 많은 유명하고 인기있는 웹 사이트 및 서비스는 쿠키를 사용하므로 오랫동안 로그인 상태를 유지할 수 있습니다. 그러나 방법을 사용하여보다 안전한 로그인 프로세스를 만들 수 있습니까?

아이디어는 다음과 같습니다. 쿠키 사용 방법을 도울 수 있습니다. 로그인 한 사용자를 식별하기 위해 ID 대신 임의의 키를 사용하는 경우 먼저 기본 데이터를 임의의 사용자에게 유출하지 않으며 두 번째는 임의의 사용자를 고려하는 경우 키가 크면 누구나 키를 추측하거나 임의의 키를 만드는 것이 더 어렵습니다. 예를 들어, 사용자 브라우저에서 "KUYTYRFU7987gJHFJ543JHBJHCF5645UYTUYJH54657jguthfn"과 같은 40 개의 길이 키를 저장할 수 있으며 누구나 정확한 키를 작성하고 다른 사람인 것처럼 가장 할 가능성이 줄어 듭니다.


1
좋은 설명입니다. 개별 사용자를 인식하기 위해 토큰에 GUID를 사용합니다.
Karthik

17

짧은 답변

우선 순위에 따라 정렬 된 규칙 :

  • 규칙 1. 사용자 입력을 절대 신뢰하지 마십시오. 쿠키는 안전하지 않습니다. 민감한 데이터에는 세션을 사용하십시오.
  • 규칙 2. 사용자가 브라우저를 닫을 때 영구 데이터가 남아 있어야하는 경우 쿠키를 사용하십시오.
  • 규칙 3. 사용자가 브라우저를 닫을 때 영구 데이터를 유지할 필요가 없으면 세션을 사용하십시오.
  • 규칙 4. 자세한 답변을 읽으십시오!

출처 : https://www.lucidar.me/en/web-dev/sessions-or-cookies/


자세한 답변

쿠키

  • 쿠키는 클라이언트 쪽 (방문자 브라우저)에 저장됩니다.
  • 쿠키는 안전하지 않습니다. 쿠키 내용을 읽고 쓰는 것이 매우 쉽습니다.
  • 쿠키를 사용할 때는 유럽 법 (GDPR)에 따라 방문자에게 알려야합니다.
  • 만료는 설정할 수 있지만 사용자 나 브라우저는이를 변경할 수 있습니다.
  • 사용자 (또는 브라우저)는 쿠키 사용을 거부 할 수 있습니다 (설정).

세션

  • 세션은 서버 측에 저장됩니다.
  • 세션은 쿠키를 사용합니다 (아래 참조).
  • 세션은 쿠키보다 안전하지만 위험하지는 않습니다.
  • 서버 구성에서 만료가 설정됩니다 (예 : php.ini).
  • 기본 만료 시간은 24 분 또는 브라우저를 닫을 때입니다.
  • 사용자가 새 페이지를 새로 고치거나로드하면 만료가 재설정됩니다.
  • 사용자 (또는 브라우저)는 쿠키 사용을 거부하여 세션을 거부 할 수 있습니다.
  • 법적으로, 당신은 또한 쿠키를 방문자에게 알려야하지만, 선례의 부족은 아직 명확하지 않습니다.

적절한 선택

세션은 쿠키를 사용합니다! 세션 데이터는 서버 측에 저장되지만 UID는 클라이언트 측 쿠키에 저장됩니다. 서버가 지정된 사용자를 올바른 세션 데이터와 일치시킬 수 있습니다. UID는 보호되어 있으며 해킹하기는 어렵지만 공격 할 수는 없습니다. 민감한 조치 (이메일 변경 또는 비밀번호 재설정)의 경우 세션에 의존하지 말고 쿠키도 사용하지 마십시오. 조치를 확인하려면 사용자 비밀번호를 요청하십시오.

민감한 데이터 는 쿠키 (이메일, 암호화 된 비밀번호, 개인 데이터 등)에 저장해서는 안됩니다. 데이터는 외부 컴퓨터에 저장되며 컴퓨터가 개인용 (교실 또는 공용 컴퓨터)이 아닌 경우 다른 사람이 쿠키 내용을 읽을 수 있습니다.

Remember-me 데이터는 쿠키에 저장해야합니다. 그렇지 않으면 사용자가 브라우저를 닫을 때 데이터가 손실됩니다. 그러나 'remember-me'쿠키에 비밀번호 또는 사용자 개인 데이터를 저장하지 마십시오. 사용자 데이터를 데이터베이스에 저장하고이 데이터를 쿠키에 저장된 암호화 된 ID / 키 쌍과 연결하십시오.

이전 명령을 고려한 후 다음 질문은 쿠키와 세션 중에서 선택하는 데 도움이되는 것입니다.

사용자가 브라우저를 닫을 때 영구 데이터가 남아 있어야합니까?

  • 대답이 예인 경우 쿠키를 사용하십시오 .
  • 대답이 아니오 인 경우 세션을 사용하십시오 .

13

실제로 세션과 쿠키는 항상 별개의 것은 아닙니다. 세션이 쿠키를 사용하는 것은 아니지만 항상 그런 것은 아닙니다.

이 다른 질문들에는 귀하의 질문에 대한 좋은 답변이 있습니다. 귀하의 질문은 구체적으로 사용자의 IDU (또는 ID)를 저장하는 것에 관한 것이므로 다른 질문과 중복되는 것은 아니지만 답변이 도움이 될 것입니다.

쿠키 대 세션

캐시 VS 세션 VS 쿠키?

세션과 쿠키의 차이점은 무엇입니까?


10

나는 개인적으로 쿠키와 세션을 모두 사용합니다.

쿠키는 사용자가 "기억하기" 체크 상자를 클릭 할 때만 사용됩니다 . 또한 쿠키는 암호화 되며 데이터 는 서버 에서만 해독 됩니다. 누군가 쿠키를 편집하려고하면 해독기가 쿠키를 감지하고 요청을 거부 할 수 있습니다.

로그인 정보가 쿠키에 저장 되는 많은 사이트를 보았습니다 . 누구나 쿠키 에서 사용자의 아이디와 사용자 이름을 변경하여 누구나 계정액세스 할 수 있습니다.

감사,


2

세션과 쿠키가 동일하지 않습니다.

세션은 웹 페이지의 정보를 저장하는 데 사용됩니다. 일반적으로 웹 페이지에는 이러한 정보를 저장할 추억이 없습니다. 그러나 우리는 필요한 정보를 저장할 수 있습니다.

그러나 쿠키는 사용자를 식별하는 데 사용됩니다. 쿠키를 사용하여 데이터를 저장할 수 있습니다. 사용자 웹 브라우저에 저장되는 데이터의 작은 부분입니다. 따라서 사용자가 다음에 검색 할 때마다 브라우저는 이전 활동을 얻기 위해 쿠키 데이터 정보를 서버로 다시 보냅니다.

학점 : 세션 및 쿠키


사용자가 쿠키를 비활성화하면 어떻게됩니까? 쿠키는 어떻게 사용자를 식별합니까?
SohailRajput

1

세션을 사용하면 쿠키와 마찬가지로 개별 정보를 저장할 수 있지만 데이터는 클라이언트 대신 서버에 저장됩니다.


0

다른 사람들이 말했듯이 세션은 영리하며 클라이언트에서 정보를 숨길 수 있다는 이점이 있습니다.

그러나 쿠키에는 여전히 하나 이상의 이점 이 있습니다 . Javascript (예 : ngCookies ) 에서 쿠키에 액세스 할 수 있습니다 . PHP 세션을 사용하면 PHP 스크립트 외부의 어느 곳에서도 액세스 할 수 없습니다.


1
물론. 직접적으로는 아니지만 세션 데이터를 반환하는 스크립트에 대한 ajax 요청을 통해 액세스 할 수 있습니다. 그러나 당신은 확실하지 않습니다.
l00k

0

세션을 선택하겠습니다. 먼저 모든 세션이 쿠키보다 안전합니다. 쿠키는 클라이언트 사이트 데이터이고 세션은 서버 사이트 데이터입니다. 쿠키는 사용자 컴퓨터 브라우저에 서버에 내장 된 작은 코드 조각이므로 사용자를 식별하는 데 사용됩니다. 반면에 HTTP 주소가 192.168.0.1에서 765487cf34ert8ded… .. 또는 GET 및 POST 메소드를 사용하여 숫자로 변경되어 웹 서버가 사용자를 모르므로 세션을 사용하면 신원을 보호 할 수 있습니다. 세션은 사용자 ID조차 서로 일치 할 수없는 고유 ID 세션에 사용자 데이터를 저장합니다. 세션은 단일 사용자 정보를 한 애플리케이션의 모든 페이지에 저장합니다. 쿠키 만료는 setcookies ()의 도움으로 설정되지만 세션 만료는 설정되어 있지 않지만 사용자가 브라우저를 끄면 만료됩니다.


0

세션은 쿠키 정보와 관련된 서버의 정보 그룹입니다. PHP를 사용하는 경우 세션을 확인할 수 있습니다. _ 경로 위치를 저장하고 실제로 "세션을보십시오". 쿠키는 클라이언트에서 보내고받는 데이터 조각입니다. 쿠키는 종종 어떤 클라이언트가 어떤 세션을 처리했는지 서버에 알려주기 때문에 세션을 용이하게하는 데 사용됩니다. 이 작업을 수행하는 다른 방법 (쿼리 문자열 마법 등)이 있지만 쿠키가 가장 일반적 일 수 있습니다.

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