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


154

웹 개발 교육을 받고 있으며 JSP서블릿 에 대해 배우고 있습니다. 나는 약간의 지식을 가지고있다 HttpSession-나는 그것을 샘플 프로젝트 중 일부에서 사용했다.

브라우저에서 "쿠키 삭제"옵션을 보았습니다. 쿠키를 삭제하면 쿠키도 삭제됩니다 HttpSession.

쿠키와 세션이 동일합니까? 그들 사이의 차이점은 무엇입니까?


또한이 질문을 참조하십시오 : < stackoverflow.com/questions/356562/… > 구체적으로, 서명 된 쿠키에 대한 설명.
Joel Coehoorn

나는이 질문에 대한 두 번째 대답이 더 적절하다고 생각합니다. 최고의 답변으로 선택하면 많은 사람들이 그것을 읽을 것입니다.
Suraj Jain

답변:


180

세션은 사용자 정보가 포함 된 서버 측 파일이고 쿠키는 사용자 정보가 포함 된 클라이언트 측 파일입니다. 세션에는 세션을 특정 사용자에게 매핑하는 고유 식별자가 있습니다. 이 식별자는 URL로 전달되거나 세션 쿠키에 저장 될 수 있습니다.

대부분의 최신 사이트는 두 번째 접근 방식을 사용하여 URL에 보안 식별자를 전달하는 대신 쿠키에 식별자를 저장합니다. 쿠키를 삭제하면 쿠키에 포함 된 고유 세션 식별자를 제거 할 때 쿠키를 삭제하여 해당 세션을 효과적으로 지울 수 있습니다.


10
" URL에 전달하면 (보안 위험이 발생합니다.) 실제로 두 방법 모두 보안 위험이 있습니다 (다른 방법). URL의 secret-ID는 올바르게 수행되고 사용자가 URL이 비밀이며 공개 포럼에 게시 할 수 없음을 이해하는 경우 보안을 유지할 수 있습니다.
curiousguy

1
"식별자는 URL로 전달되거나 세션 쿠키에 저장 될 수 있습니다." . 어디? 클라이언트 또는 서버 쪽? 더 명확하게 주셔서 감사합니다.
Adib Aroui

4
@whitelettersandblankspaces 세션 쿠키는 클라이언트에 저장되며 값은 브라우저 세션을 서버의 사용자 세션에 매핑하기 위해 모든 요청과 함께 전송되는 고유 세션 식별자를 포함합니다.
WynandB

306

쿠키는 단순히 클라이언트와 서버간에주고받는 짧은 텍스트 문자열입니다. name=bob; password=asdfas쿠키를 저장 하고 서버 측에서 클라이언트를 식별하기 위해 쿠키를주고 받을 수 있습니다 . 이것을 단기 기억이없는 은행원과 교환하는 것으로 생각할 수 있으며 각 거래마다 자신을 식별해야합니다. 물론 이런 종류의 정보를 저장하기 위해 쿠키를 사용하는 것은 끔찍한 안전하지 않습니다. 쿠키의 크기도 제한되어 있습니다.

이제 은행원이 자신의 기억 문제에 대해 알게되면 정보를 종이에 적어 짧은 ID 번호를 지정할 수 있습니다. 그런 다음 각 거래에 대해 계좌 번호와 운전 면허를 제공하는 대신 "I 'm client 12"라고 말하면됩니다.

웹 서버로 번역 : 서버는 관련 정보를 세션 객체에 저장하고 쿠키로 클라이언트에게 다시 보낼 세션 ID를 만듭니다. 클라이언트가 쿠키를 다시 보내면 서버는 단순히 ID를 사용하여 세션 객체를 조회 할 수 있습니다. 따라서 쿠키를 삭제하면 세션이 손실됩니다.

다른 대안은 서버가 URL 재 작성을 사용하여 세션 ID를 교환하는 것입니다.

링크가 있다고 가정 해보십시오 www.myserver.com/myApp.jsp . 페이지를 통해 모든 URL을 다시 www.myserver.com/myApp.jsp?sessionID=asdf쓰거나 www.myserver.com/asdf/myApp.jsp식별자를 교환 할 수 있습니다. 이 기술은 웹 응용 프로그램 컨테이너에서 처리하며 일반적으로 쿠키없는 세션을 사용하도록 구성을 설정하여 설정됩니다.


29
이것은 위대한 실제 비유에 기반한 훌륭한 설명입니다. 이 답변은 더 많이지지되어야합니다. 그러한 질문을 할 가능성이 가장 높은 초보자에게는 매우 접근성이 좋습니다.
user798719

2
사용자이고 다른 사람이 내 세션 ID를 알게되면 어떻게됩니까?
Maria Ines Parnisari

3
@ I19 아마도 그들은 당신을 사칭 할 수 있습니다. 온라인 도박 시나리오에서 이러한 현상이 발생했습니다. 호텔 와이파이를 스니핑하고 세션 ID를 도용하고 계정에 액세스하십시오. 세션 보안은 또 다른 이야기입니다.
Chris Cudmore

2
누가 쿠키를 먼저 생성합니까? 서버 또는 클라이언트? 아니면이 응용 프로그램에 따라 달라 집니까? (그렇지 않으면 서버가 보안 위협을 야기한다고 말하고 싶지만 언급 할 가치가 있다고 생각합니까?)
nha

4
@nha 서버가 세션을 생성하고 쿠키 응답으로 세션을 전달합니다. 세션은 생성하려는 응용 프로그램 논리에 따라 생성됩니다. 클라이언트는 쿠키를 생성 할 수도 있지만 세션에서 세션이 나타내는 값을 서버가 알지 못하기 때문에 세션을 식별하는 시나리오에서 많이 사용하지 않을 수 있습니다.
Azeem

4

쿠키와 세션은 모두 사용자에 대한 정보를 저장하지만 (HTTP 요청의 상태를 유지하기 위해) 쿠키는 클라이언트 측 (브라우저)에 정보를 저장하고 세션은 서버 측에 정보를 저장한다는 점이 다릅니다. 쿠키는 제한된 사용자에 대한 정보를 저장하고 각 사용자에 대해 제한된 콘텐츠 만 저장한다는 의미에서 제한됩니다. 세션은 이러한 방식으로 제한되지 않습니다.



1

쿠키는 기본적으로 웹 브라우저를 통해 액세스되는 전역 배열입니다. 많은 시간이 값을 보내고받는 데 사용됩니다. 양식 간 값에 액세스하는 저장 메커니즘 역할을합니다. 브라우저는 쿠키를 비활성화하여 세션과 비교하여 사용에 제약을 추가합니다.

세션은 로그인과 로그 아웃 사이에서 정의 할 수 있습니다. 사용자 로그인과 로그 아웃 사이의 시간은 세션입니다. 세션은 세션 시간 동안 만, 즉 로그 아웃하기 전에 만 값을 저장합니다. 세션은 사용자가 로그온 한 후 사용자의 활동을 추적하는 데 사용됩니다.


0

구글 JSESSIONID . 서블릿 API가 처음에 URL 재 작성을 사용하는 방법과 쿠키가 활성화 된 경우 쿠키를 사용하여 세션을 관리하는 방법에 대해 설명합니다.

HTTP는 상태가 없으므로 클라이언트 브라우저는 각 요청마다 세션 ID를 서버에 보내야합니다. 서버는 어떤 방법 으로든이 ID를 사용하여 해당 세션에 대한 데이터를 검색하여 요청 수명 동안 사용할 수있게합니다.


0

Asp.net 세션 :

1. 애플리케이션 전체에 걸쳐 데이터를 유지합니다.

2. 현재 세션이 활성 상태 인 경우 데이터를 유지합니다. 여러 컨트롤러 aciton 및 뷰에서 액세스 할 수있는 데이터가 필요한 경우 세션은 데이터를 저장하고 검색하는 방법입니다.

3. 세션은 사용자 정보가 포함 된 서버 측 파일입니다. [세션은 특정 사용자에게 매핑하는 고유 식별자입니다]

웹 서버로 번역 : 서버는 관련 정보를 세션 객체에 저장하고 쿠키로 클라이언트에게 다시 보낼 세션 ID를 만듭니다. 클라이언트가 쿠키를 다시 보내면 서버는 단순히 ID를 사용하여 세션 객체를 조회 할 수 있습니다. 따라서 쿠키를 삭제하면 세션이 손실됩니다.


0

쿠키는 클라이언트와 서버간에 세션을 구현하는 방법으로 쿠키에 저장된 세션 정보입니다. 그러나 이것이 세션 정보를 보유하는 유일한 방법은 아니며 다른 방법은 Url에 세션 정보를 저장하는 것입니다.


0

쿠키 는 브라우저에 텍스트 파일 형식으로 저장되며 제한된 양의 데이터 만 저장됩니다 . 4kb [4096bytes] 만 허용 됩니다. $ _COOKIE 변수는 동일한 이름을 가진 여러 쿠키를 보유하지 않습니다

쿠키 값에 쉽게 액세스 할 수 있습니다 . 따라서 덜 안전 합니다 .setcookie () 함수는

<html> 

꼬리표.

세션 은 서버 측에 저장되며 무제한의 데이터가 저장되며 세션에서 여러 변수를 보유합니다. 쿠키 값에 쉽게 액세스 할 수 없으므로 더 안전 합니다.

링크 : 쿠키와 세션의 차이점


실제로 쿠키에 여러 데이터를 보유 할 수 있습니다. 또한 세션은 실제로 무제한의 데이터를 보유 할 수 없습니다. 당신은 당신이 가진 RAM의 양에 의해 거의 제한됩니다.
Koray Tugay
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.