HTTP는 이유없는 상태 비 저장 프로토콜입니다. 세션은 HTTP에 상태를 용접합니다. 경험상 세션 상태를 사용하지 마십시오.
업데이트 : HTTP 수준에는 세션 개념이 없습니다. 서버는 클라이언트에게 고유 한 ID를 부여하고 클라이언트에게 모든 요청에 대해 다시 제출하도록 지시함으로써이를 제공합니다. 그런 다음 서버는 해당 ID를 Session 개체의 큰 해시 테이블에 대한 키로 사용합니다. 서버는 요청을받을 때마다 클라이언트가 요청과 함께 제출 한 ID를 기반으로 세션 오브젝트의 해시 테이블에서 세션 정보를 찾습니다. 이 모든 추가 작업은 확장성에 대한 두 가지 이유입니다 (HTTP가 상태 비 저장 인 큰 이유).
- Whammy One : 단일 서버가 수행 할 수있는 작업을 줄입니다.
- Whammy Two : 요청을 이전 서버로 라우팅 할 수 없기 때문에 확장이 어려워집니다. 모두 동일한 세션을 가지고 있지는 않습니다. 주어진 세션 ID를 가진 모든 요청을 동일한 서버에 고정 할 수 있습니다. 쉬운 일이 아니며 단일 장애 지점입니다 (시스템 전체가 아니라 많은 사용자를위한). 또는 클러스터의 모든 서버에서 세션 스토리지를 공유 할 수 있지만 이제 네트워크 연결 메모리, 독립형 세션 서버 등과 같이 더 복잡합니다.
모든 것을 감안할 때 세션에 더 많은 정보를 넣으면 Vinko가 지적한 것처럼 성능에 미치는 영향이 커집니다. Vinko가 지적한 것처럼 객체를 직렬화 할 수 없으면 세션이 제대로 작동하지 않습니다. 따라서 경험상 세션에 반드시 필요한 것 이상을 두지 마십시오.
@Vinko 일반적으로 보낸 응답에 추적중인 데이터를 포함시키고 클라이언트가 다시 제출하도록 (예 : 숨겨진 입력으로 데이터를 전송) 서버 저장 상태를 유지할 수 있습니다. 서버 측 상태 추적 이 실제로 필요한 경우 백업 데이터 저장소에 있어야합니다.
(Vinko는 다음과 같이 덧붙입니다. PHP는 세션 정보를 저장하기 위해 데이터베이스를 사용할 수 있으며, 클라이언트가 매번 데이터를 다시 제출하도록하면 잠재적 인 확장 성 문제가 해결 될 수 있지만, 클라이언트가 모든 것을 제어 할 수 있다는 점에주의해야합니다. 당신의 상태)