웹 애플리케이션은 상태 비 저장이어야합니다
무의미한 말. 웹 요청 은 상태 비 저장이어야합니다. 보다 정확하게는 웹 요청 은 상태 비 저장입니다.
그러나 전체 응용 프로그램 이 무국적이어야한다고 말하는 것은 완벽한 말이 아닙니다.
각 요청은 독립적 인 거래로 취급됩니다.
예, 정확하게 . 또는 더 정확하게, 예, 반드시 . HTTP를 통해 각 요청은 본질적 으로 다른 모든 요청과 독립적입니다. HTTP에 "상태 저장"을 추가하려면 각 "상태 저장"요청에 대해 "상태"를 명시 적으로 식별, 저장 및 검색해야합니다. 노력이 필요하고 성능이 저하되며 복잡성이 증가합니다.
이러한 이유로 인해 상태 비 저장 상태 가 될 수 있는 각 요청은 상태 비 저장 상태 여야합니다.
결과적으로 세션과 쿠키는 피해야합니다 (둘 다 상태 저장 상태이므로). 더 좋은 방법은 토큰을 사용하는 것입니다
몇 가지 사항 : 토큰은 세션 저장소에도 연결될 수 있습니다. 쿠키는 세션 저장소에 연결될 필요 가 없습니다 . 토큰은 종종 쿠키에 저장됩니다. 때로는 세션이 작업에 적합한 도구 일 수도 있습니다.
즉 적어도 것을 의미한다 때때로 , 세션과 쿠키 그냥 토큰으로 "더 나은"로합니다!
[토큰]은 서버에 아무것도 저장되지 않기 때문에 상태 비 저장입니다.
그게 다야 이것이 바로 "무국적"교리에 관한 것입니다. 분명히, "아무것도"서버에 저장하는 것이 아니라 세션 상태를 서버에 저장하지 않는 것 입니다.
예를 들어 내 Gmail받은 편지함이 상태입니다. 그리고 그것은 서버에 잘 저장하는 것이 좋습니다 ! 그러나 세션 상태 가 아닙니다 .
따라서 작은 식별자를 가져 와서 자신이 누구인지 파악할 수있는 서버를 보유하는 대신, 상태 비 저장 응용 프로그램은 자신이 누구인지, 모든 피 묻은 요청으로 무엇을하고 있는지 상기시키기를 원합니다 . 응용 프로그램 상태는 여전히 존재하며 클라이언트는이를 유지해야합니다.
이제 그 상태가 작 으면 괜찮을 것입니다. 어떤 경우에는 매우 좋습니다.
그리고 물론, 우리는 단순히 상태가 좋을 것으로 예상되는 것들이 있습니다 ...
내 세션에 보관중인 데이터 (예 : 장바구니의 항목)가있을 때 웹 응용 프로그램을 상태 비 저장 상태로 만드는 방법은 무엇입니까? 이것들은 실제로 어딘가에 데이터베이스에 저장된 다음 주기적으로 제거됩니까?
두 가지 옵션이 있습니다. 세션이 있거나 거부 중입니다!
...하지만 진지하게. 일반적으로 쿠키에 장바구니를 저장하지 않습니다. 쇼핑 카트와 같은 것은 "전통적인"세션에 저장되거나 Cart
서버가 후속 요청으로 가져 오기 위해 사용하는 일종의 ID를 가진 개체 로 저장됩니다 . .. uhh ... ... err ... 세션 과 같은 종류 .
진지하게 : 두 의사 소통 상담원이 대화에서 메시지를 컨텍스트화할 수있을 때 "상태 저장성"이라고 부르는 정도가 상당히 높습니다. 그리고 전통적으로 이해되는 세션은 우리가 일반적으로 이것을 발생시키는 메커니즘이라고 부릅니다.
서버가 처리하는 각 요청에 대해 토큰을 사용하든 "세션"을 사용하든 관계없이 해당 요청을 컨텍스트 화하여 처리해야한다고 주장 합니다. 컨텍스트가 필요 하지 않으면 가져 오지 마십시오. 상황 이 필요한 경우 근처에있는 것이 좋습니다.
그리고 관련 질문으로 주요 웹 사이트 (Amazon, Google, Facebook, Twitter 등)가 실제로 상태가 없습니까? 토큰이나 쿠키 (또는 둘 다)를 사용합니까?
아마 둘 다. 그러나 일반적으로 말하면 정확하게 사용자의 작업을 수행합니다. 대규모 "세션"데이터베이스에서 "상태"레코드를 식별하도록 쿠키를 설정합니다.
가능한 경우 중앙 저장소에 대한 불필요한 경합을 피하기 위해 기본 ID 클레임을 단기 "토큰"에 넣었다고 생각합니다. 그러나 이러한 서비스 중 다수가 "다른 모든 위치에서 로그 아웃"할 수 있다는 사실은 토큰을 전혀 사용하지 않는 경우 반 전통적인 세션 모델에서 최소한 "지원"되고 있다는 것을 나타내는 좋은 지표입니다. .