서버와 클라이언트에서 쿠키를 만드는 것의 차이점은 무엇입니까? 이를 서버 측 쿠키 및 클라이언트 측 쿠키라고합니까? 서버 또는 클라이언트에서만 읽을 수있는 쿠키를 만드는 방법이 있습니까?
서버와 클라이언트에서 쿠키를 만드는 것의 차이점은 무엇입니까? 이를 서버 측 쿠키 및 클라이언트 측 쿠키라고합니까? 서버 또는 클라이언트에서만 읽을 수있는 쿠키를 만드는 방법이 있습니까?
답변:
쿠키는 웹 사이트에서 브라우저에 상태 정보를 저장하는 데 사용하는 키 / 값 쌍입니다. 웹 사이트 (example.com)가 있다고 가정하면 브라우저가 웹 페이지를 요청할 때 웹 사이트는 쿠키를 전송하여 브라우저에 정보를 저장할 수 있습니다.
브라우저 요청 예 :
GET /index.html HTTP/1.1
Host: www.example.com
서버의 답변 예 :
HTTP/1.1 200 OK
Content-type: text/html
Set-Cookie: foo=10
Set-Cookie: bar=20; Expires=Fri, 30 Sep 2011 11:48:00 GMT
... rest of the response
여기서 두 개의 쿠키 foo = 10 및 bar = 20이 브라우저에 저장됩니다. 두 번째는 9 월 30 일에 만료됩니다. 이후의 각 요청에서 브라우저는 쿠키를 서버로 다시 보냅니다.
GET /spec.html HTTP/1.1
Host: www.example.com
Cookie: foo=10; bar=20
Accept: */*
서버 측 쿠키를 "세션"이라고합니다. 이 경우 웹 사이트는 고유 한 세션 식별자를 포함하는 단일 쿠키를 브라우저에 저장합니다. 상태 정보 (위의 foo = 10 및 bar = 20)는 서버에 저장되고 세션 식별자는 요청을 서버에 저장된 데이터와 일치시키는 데 사용됩니다.
세션과 쿠키를 모두 사용하여 인증 데이터, 사용자 기본 설정, 전자 상거래 웹 사이트의 차트 콘텐츠 등을 저장할 수 있습니다.
솔루션의 장단점 아래. 이것이 내 마음에 가장 먼저 떠오르는 것입니다. 확실히 다른 것들이 있습니다.
쿠키 프로 :
쿠키 단점 :
세션 전문가 :
세션 단점 :
secure
?
아마도 Http Only 쿠키 와 카운터 부분 의 차이점을 의미 합니까?
Http 전용 쿠키는 클라이언트 측 JavaScript에서 액세스 (읽기 또는 쓰기) 할 수 없으며 서버 측에서만 액세스 할 수 있습니다. Http Only 플래그가 설정되지 않았거나 쿠키가 (클라이언트 측) JavaScript에서 생성 된 경우, 쿠키는 서버 측뿐만 아니라 (클라이언트 측) JavaScript에서 읽고 쓸 수 있습니다.
모든 쿠키는 클라이언트 와 서버입니다.
다른 점이 없다. 일반 쿠키는 서버 측 또는 클라이언트 측으로 설정할 수 있습니다. '클래식'쿠키는 각 요청과 함께 다시 전송됩니다. 서버에서 설정 한 쿠키는 응답으로 클라이언트로 전송됩니다. 서버는 명시 적으로 설정되거나 변경된 경우에만 쿠키를 전송하고 클라이언트는 각 요청에 대해 쿠키를 전송합니다.
그러나 본질적으로 동일한 쿠키입니다.
하지만 행동은 바뀔 수 있습니다
쿠키는 기본적으로 name=value
쌍이지만 값 뒤에는 클라이언트 (또는 서버)에 의해 구현 된 경우 쿠키의 동작에 영향을주는 세미콜론으로 구분 된 속성 이 있을 수 있습니다. 이러한 속성은 수명, 컨텍스트 및 다양한 보안 설정에 관한 것일 수 있습니다.
HTTP 전용 (서버 전용 아님)
이러한 속성 중 하나는 HTTP 전용 쿠키임을 나타 내기 위해 서버에서 설정할 수 있습니다. 이는 쿠키가 계속 전송되지만 JavaScript에서는 사용할 수 없음을 의미합니다. 하지만 쿠키는 아직 거기에 있습니다! 브라우저에 내장 된 보호 기능 일 뿐이지 만, 누군가 IE5와 같은 엄청나게 오래된 브라우저 나 사용자 지정 클라이언트를 사용한다면 실제로 쿠키를 읽을 수 있습니다!
그래서 '서버 쿠키'가있는 것처럼 보이지만 실제로는 없습니다. 이러한 쿠키는 여전히 클라이언트로 전송됩니다. 클라이언트에서는 쿠키가 서버로 전송되는 것을 막을 방법이 없습니다.
'유일 함'을 달성하기위한 대안
값을 서버에만 저장하거나 클라이언트에만 저장하려면 서버의 파일이나 데이터베이스 또는 클라이언트의 로컬 저장소와 같은 다른 종류의 저장소가 필요합니다.
document.cookie="foo=bar"
다음을 수행하면을 fetch("/foobar", {credentials: 'include'} )
포함하는 쿠키가 전송되지 않습니다 foo=bar
. DevTools와 콘솔을 사용하여이 사이트에서 직접 해당 코드를 시도했습니다.
예, 서버 측에서만 읽을 수있는 쿠키를 만들 수 있습니다. 이미 다른 답변에서 설명한 것처럼 "HTTP 전용"쿠키라고합니다.
아니요, 클라이언트 측에서만 읽을 수있는 "쿠키"를 만들 수있는 방법은 없습니다. 쿠키는 클라이언트-서버 통신을 용이하게하기위한 것입니다.
그러나 "클라이언트 전용 쿠키"와 같은 것을 원한다면 간단한 대답이 있습니다. "로컬 저장소"를 사용하십시오.
로컬 저장소는 실제로 쿠키보다 사용하기가 더 간단합니다. 쿠키와 로컬 저장소에 대한 간단한 요약은 다음에서 찾을 수 있습니다.
요점 : 클라이언트 측에서만 필요한 GUI 관련 항목을 저장하기 위해 JavaScript로 생성 된 쿠키를 사용할 수 있습니다. 그러나 쿠키는 모든 요청에 대해 서버로 전송되며 http-request 헤더의 일부가되므로 요청에 더 많은 데이터가 포함되어 전송 속도가 느려집니다.
페이지에 이미지, CSS 파일 및 스크립트와 같은 50 개의 리소스가있는 경우 쿠키는 (일반적으로) 각 요청과 함께 전송됩니다. 자세한 내용은 모든 웹 요청이 브라우저 쿠키를 전송합니까?
로컬 스토리지에는 데이터 전송 관련 단점이 없으며 데이터를 전송하지 않습니다. 훌륭합니다.