PHP에서 쿠키와 세션의 유사점과 차이점에 대한 비교 분석

PHPz
풀어 주다: 2018-10-11 15:10:26
원래의
1792명이 탐색했습니다.

모든 사람이 쿠키와 세션에 대해 더 깊이 이해하고 자신의 개발 작업에서 유연하게 사용할 수 있도록 영감을 제공합니다.

1. 쿠키 메커니즘

쿠키는 서버가 로컬 컴퓨터에 저장한 작은 텍스트 조각으로, 요청이 있을 때마다 동일한 서버로 전송됩니다. IETF RFC 2965 HTTP 상태 관리 메커니즘은 일반적인 쿠키 사양입니다. 웹 서버는 HTTP 헤더를 사용하여 클라이언트에 쿠키를 보냅니다. 클라이언트 터미널에서 브라우저는 이러한 쿠키를 구문 분석하여 로컬 파일에 저장합니다. 이 쿠키는 동일한 서버에 대한 모든 요청에 ​​자동으로 바인딩됩니다.

특히 쿠키 메커니즘은 클라이언트 측에서 상태를 유지하는 솔루션을 사용합니다. 이는 사용자 측 세션 상태에 대한 저장 메커니즘이며 사용자가 클라이언트 측에서 쿠키 지원을 켜야 합니다. 쿠키의 역할은 HTTP 프로토콜의 상태 비저장 결함을 해결하려는 노력입니다.
정통 쿠키 배포는 HTTP 프로토콜을 확장하여 이루어집니다. 서버는 지침에 따라 해당 쿠키를 생성하도록 브라우저에 메시지를 표시하기 위해 HTTP 응답 헤더에 특수 지침 줄을 추가합니다. 그러나 JavaScript와 같은 순수 클라이언트측 스크립트도 쿠키를 생성할 수 있습니다. 쿠키 사용은 특정 원칙에 따라 브라우저에 의해 백그라운드에서 서버로 자동 전송됩니다. 브라우저는 저장된 모든 쿠키를 확인합니다. 쿠키의 선언된 범위가 요청하려는 리소스의 위치보다 크거나 같으면 쿠키는 요청된 리소스의 HTTP 요청 헤더에 첨부되어 서버로 전송됩니다.

쿠키의 내용에는 주로 이름, 값, 만료 시간, 경로 도메인 이 포함됩니다. 경로와 도메인이 함께 쿠키의 범위를 구성합니다. 만료 시간이 설정되지 않으면 이 쿠키의 수명은 브라우저 세션 동안이라는 의미이며, 브라우저 창이 닫히면 쿠키가 사라집니다. 브라우저 세션 동안 지속되는 이러한 유형의 쿠키를 세션 쿠키라고 합니다. 세션 쿠키는 일반적으로 하드 디스크에 저장되지 않고 메모리에 저장됩니다. 물론 이 동작은 사양에 의해 지정되지 않습니다. 만료 시간이 설정되면 브라우저는 쿠키를 하드 디스크에 저장합니다. 브라우저를 닫았다가 다시 열면 해당 쿠키는 설정된 만료 시간이 초과될 때까지 계속 유효합니다. 하드 드라이브에 저장된 쿠키는 두 개의 IE 창과 같은 서로 다른 브라우저 프로세스 간에 공유될 수 있습니다. 브라우저마다 메모리에 저장된 쿠키를 처리하는 방법이 다릅니다.

세션 메커니즘은 서버 측에서 상태를 유지하는 솔루션을 사용합니다. 동시에 우리는 서버 측에서 상태를 유지하는 솔루션도 클라이언트 측에서 ID를 저장해야 하므로 세션 메커니즘은 ID 저장 목적을 달성하기 위해 쿠키 메커니즘을 사용해야 할 수도 있음을 확인했습니다. 세션은 전역 변수를 관리하는 편리한 방법을 제공합니다.

세션은 각 사용자를 위한 것입니다. 변수의 값은 서버에 저장되며, 세션 ID는 접속 시 사용자의 브라우저를 통해 서버에 반환됩니다. 클라이언트가 쿠키를 비활성화하면 이 값이 get에 의해 서버에 반환되도록 설정될 수도 있습니다.

보안 측면에서: 세션을 사용하는 사이트를 방문하여 자신의 컴퓨터에 쿠키를 생성하는 경우 서버 측 세션 메커니즘은 클라이언트의 저장된 데이터를 임의로 읽지 않으므로 더 안전한 것이 좋습니다 . 정보.

2. 세션 메커니즘

서버 측 메커니즘은 해시 테이블과 유사한 구조를 사용합니다(또는 해시 테이블을 사용할 수도 있음). 정보를 저장합니다.

프로그램이 클라이언트 요청에 대한 세션을 생성해야 할 때 서버는 먼저 클라이언트 요청에 이미 세션 식별자(세션 ID라고 함)가 포함되어 있는지 확인합니다. . 이 클라이언트는 세션을 생성했으며 서버는 세션 ID를 기반으로 세션을 검색하여 사용합니다(검색할 수 없는 경우 클라이언트 요청에 세션 ID가 포함되지 않은 경우). 클라이언트에 대한 세션이 생성되고 세션과 연결된 세션 ID가 반복되지도 않고 위조할 패턴을 찾기도 쉽지 않은 문자열이어야 합니다. 저장을 위해 이 응답으로 클라이언트에 반환됩니다.

쿠키는 이 세션 ID를 저장하는 데 사용될 수 있으므로 상호 작용 프로세스 중에 브라우저는 규칙에 따라 이 ID를 서버에 자동으로 표시할 수 있습니다. 일반적으로 이 쿠키의 이름은 SEEESIONID와 유사합니다. 그러나 쿠키는 인위적으로 비활성화될 수 있으며 쿠키가 비활성화된 경우 세션 ID를 서버에 다시 전달하는 다른 메커니즘이 있어야 합니다.
자주 사용되는 기술은 URL 재작성이라고 하며, URL 경로 끝에 세션 ID를 직접 추가하는 것입니다. Form Hidden Field라는 기술도 있습니다. 즉, 서버는 자동으로 양식을 수정하고 양식이 제출될 때 세션 ID가 서버로 다시 전달될 수 있도록 숨겨진 필드를 추가합니다.

쿠키와 세션 모두 세션 추적을 수행할 수 있지만 완료 원칙은 다릅니다. 일반적인 상황에서는 둘 다 요구 사항을 충족할 수 있지만 때로는 Cookie를 사용할 수 없고 때로는 Session을 사용할 수 없는 경우도 있습니다.

다음은 둘의 특징과 적용되는 상황을 비교한 것이다.

1. 접근 방식의 차이

쿠키는 ASCII 문자열만 저장할 수 있습니다. 유니코드 문자나 바이너리 데이터에 액세스해야 하는 경우 먼저 인코딩해야 합니다. 쿠키는 Java 객체에 직접 액세스할 수 없습니다. 조금 더 복잡한 정보를 저장하려면 쿠키를 사용하는 것이 더 어렵습니다.
세션은 문자열, 정수, 목록, 맵 등을 포함하되 이에 국한되지 않는 모든 유형의 데이터에 액세스할 수 있습니다. Java Bean 또는 Java 클래스, 객체 등도 세션에 직접 저장할 수 있으므로 사용이 매우 편리합니다. 세션은 Java 컨테이너 클래스로 간주될 수 있습니다.

2. 개인정보취급방침의 차이

쿠키는 클라이언트 리더에 저장되어 클라이언트가 볼 수 있으며, 클라이언트의 일부 프로그램도 볼 수 있습니다. 쿠키의 내용은 스누핑, 복사 또는 수정될 수도 있습니다. 세션은 서버에 저장되며 클라이언트에게 투명하므로 민감한 정보가 유출될 위험이 없습니다.
쿠키를 선택하실 경우에는 계정 비밀번호 등 민감한 정보를 쿠키에 쓰지 않도록 노력하시는 것이 더 좋은 방법입니다. Google이나 Baidu와 같은 쿠키 정보는 암호화한 다음, 서버에 제출한 후 복호화하여 본인만이 쿠키에 담긴 정보를 읽을 수 있도록 하는 것이 가장 좋습니다. 어쨌든 Session을 선택하면 훨씬 쉬울 것입니다. 어쨌든 Session의 모든 개인 정보는 효과적으로 보호될 수 있습니다.

3. 유효성의 차이

Google을 사용해 본 사람은 누구나 Google에 로그인하면 Google이 로그인 정보는 오랫동안 유효합니다. 사용자는 방문할 때마다 다시 로그인할 필요가 없으며 Google은 사용자의 로그인 정보를 영구적으로 기록합니다. 이러한 효과를 얻으려면 쿠키를 사용하는 것이 더 나은 선택이 될 것입니다. 쿠키의 만료 시간 속성을 매우 큰 숫자로 설정하면 됩니다.

세션은 JSESSIONID라는 쿠키에 의존하고 쿠키 JSESSIONID의 기본 만료 시간은 -1이기 때문에 브라우저가 닫히는 동안 세션은 무효화되므로 세션은 영구 유효성 효과를 얻을 수 없습니다. 정보의. URL 주소 다시 쓰기를 사용하여 수행할 수 없습니다. 그리고 세션 시간 제한을 너무 길게 설정하면 서버에 세션이 많이 누적될수록 메모리 오버플로가 발생하기 쉬워집니다.

4. 서버 압박의 차이

세션은 서버 측에 저장되며, 각 사용자가 세션을 생성합니다. 동시에 접속하는 사용자가 많으면 많은 세션이 생성되어 많은 메모리를 소모하게 됩니다. 따라서 Google, Baidu, Sina 등 동시 방문 수가 매우 많은 웹사이트에서는 Session을 사용하여 사용자 세션을 추적할 가능성이 거의 없습니다.

쿠키는 클라이언트 측에 저장되며 서버 리소스를 차지하지 않습니다. 동시에 읽는 사용자가 많으면 쿠키를 선택하는 것이 좋습니다. Google, Baidu, Sina의 경우 쿠키가 유일한 선택일 수 있습니다.

5. 브라우저 지원 차이

쿠키는 클라이언트 브라우저에서 지원되어야 합니다. 클라이언트가 쿠키를 비활성화하거나 쿠키를 지원하지 않으면 세션 추적이 무효화됩니다. WAP 애플리케이션과 관련하여 일반 쿠키는 사용되지 않습니다.

클라이언트 브라우저가 쿠키를 지원하지 않는 경우 세션 및 URL 주소 다시 쓰기를 사용해야 합니다. 세션 프로그램을 사용하는 모든 URL은 다시 작성되어야 하며, 그렇지 않으면 세션 추적이 무효화됩니다. WAP 애플리케이션의 경우 세션 URL 주소 다시 쓰기가 유일한 옵션일 수 있습니다.

클라이언트가 쿠키를 지원하는 경우 이 브라우저 창과 하위 창에서 쿠키가 유효하도록 설정하거나(만료 시간을 -1로 설정) 모든 브라우저 창에서 유효하도록 설정할 수 있습니다. (만료 시간 설정) 시간은 0보다 큰 정수로 설정됩니다. 그러나 세션은 이 리더 창과 해당 하위 창 내에서만 유효할 수 있습니다. 두 개의 브라우저 창이 서로 독립적인 경우 두 개의 서로 다른 세션을 사용합니다. (세션은 IE8의 다른 창과 관련됩니다)

6. 크로스 도메인 지원의 차이점

쿠키는 크로스 도메인 액세스를 지원합니다. 예, 도메인 속성 ".biaodianfu.com"으로 설정하면 접미사 ".biaodianfu.com"이 있는 모든 도메인 이름이 이 쿠키에 액세스할 수 있습니다. 크로스 도메인 쿠키는 이제 Google, Baidu, Sina 등과 같은 인터넷에서 일반적으로 사용됩니다. 세션은 도메인 간 이름 액세스를 지원하지 않습니다. 세션은 해당 세션이 위치한 도메인 이름 내에서만 유효합니다.
쿠키만 사용하거나 세션만 사용하면 원하는 효과를 얻지 못할 수 있습니다. 이때 쿠키와 세션을 동시에 사용하도록 노력해야 합니다. 쿠키와 세션의 조합은 실제 프로젝트에서 예상치 못한 많은 효과를 얻을 것입니다.

위 내용은 PHP에서 쿠키와 세션의 차이점과 비교입니다. 모든 분들의 학습에 도움이 되기를 바랍니다. 더 많은 관련 튜토리얼을 보려면 초보부터 숙달까지 PHP 프로그래밍에 대한 전체 비디오 튜토리얼 세트

를 방문하세요.
관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿