찾다
백엔드 개발PHP 튜토리얼PHP에서 쿠키와 세션의 유사점과 차이점에 대한 비교 분석

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

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 프로그래밍에 대한 전체 비디오 튜토리얼 세트

를 방문하세요.
성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
PHP vs. Python : 차이점 이해PHP vs. Python : 차이점 이해Apr 11, 2025 am 12:15 AM

PHP와 Python은 각각 고유 한 장점이 있으며 선택은 프로젝트 요구 사항을 기반으로해야합니다. 1.PHP는 간단한 구문과 높은 실행 효율로 웹 개발에 적합합니다. 2. Python은 간결한 구문 및 풍부한 라이브러리를 갖춘 데이터 과학 및 기계 학습에 적합합니다.

PHP : 죽어 가거나 단순히 적응하고 있습니까?PHP : 죽어 가거나 단순히 적응하고 있습니까?Apr 11, 2025 am 12:13 AM

PHP는 죽지 않고 끊임없이 적응하고 진화합니다. 1) PHP는 1994 년부터 새로운 기술 트렌드에 적응하기 위해 여러 버전 반복을 겪었습니다. 2) 현재 전자 상거래, 컨텐츠 관리 시스템 및 기타 분야에서 널리 사용됩니다. 3) PHP8은 성능과 현대화를 개선하기 위해 JIT 컴파일러 및 기타 기능을 소개합니다. 4) Opcache를 사용하고 PSR-12 표준을 따라 성능 및 코드 품질을 최적화하십시오.

PHP의 미래 : 적응 및 혁신PHP의 미래 : 적응 및 혁신Apr 11, 2025 am 12:01 AM

PHP의 미래는 새로운 기술 트렌드에 적응하고 혁신적인 기능을 도입함으로써 달성 될 것입니다. 1) 클라우드 컴퓨팅, 컨테이너화 및 마이크로 서비스 아키텍처에 적응, Docker 및 Kubernetes 지원; 2) 성능 및 데이터 처리 효율을 향상시키기 위해 JIT 컴파일러 및 열거 유형을 도입합니다. 3) 지속적으로 성능을 최적화하고 모범 사례를 홍보합니다.

PHP의 초록 클래스 또는 인터페이스에 대한 특성과 언제 특성을 사용 하시겠습니까?PHP의 초록 클래스 또는 인터페이스에 대한 특성과 언제 특성을 사용 하시겠습니까?Apr 10, 2025 am 09:39 AM

PHP에서, 특성은 방법 재사용이 필요하지만 상속에 적합하지 않은 상황에 적합합니다. 1) 특성은 클래스에서 다중 상속의 복잡성을 피할 수 있도록 수많은 방법을 허용합니다. 2) 특성을 사용할 때는 대안과 키워드를 통해 해결할 수있는 방법 충돌에주의를 기울여야합니다. 3) 성능을 최적화하고 코드 유지 보수성을 향상시키기 위해 특성을 과도하게 사용해야하며 단일 책임을 유지해야합니다.

DIC (Dependency Injection Container) 란 무엇이며 PHP에서 사용하는 이유는 무엇입니까?DIC (Dependency Injection Container) 란 무엇이며 PHP에서 사용하는 이유는 무엇입니까?Apr 10, 2025 am 09:38 AM

의존성 주입 컨테이너 (DIC)는 PHP 프로젝트에 사용하기위한 객체 종속성을 관리하고 제공하는 도구입니다. DIC의 주요 이점에는 다음이 포함됩니다. 1. 디커플링, 구성 요소 독립적 인 코드는 유지 관리 및 테스트가 쉽습니다. 2. 유연성, 의존성을 교체 또는 수정하기 쉽습니다. 3. 테스트 가능성, 단위 테스트를 위해 모의 객체를 주입하기에 편리합니다.

SPL SplfixedArray 및 일반 PHP 어레이에 비해 성능 특성을 설명하십시오.SPL SplfixedArray 및 일반 PHP 어레이에 비해 성능 특성을 설명하십시오.Apr 10, 2025 am 09:37 AM

SplfixedArray는 PHP의 고정 크기 배열로, 고성능 및 메모리 사용이 필요한 시나리오에 적합합니다. 1) 동적 조정으로 인한 오버 헤드를 피하기 위해 생성 할 때 크기를 지정해야합니다. 2) C 언어 배열을 기반으로 메모리 및 빠른 액세스 속도를 직접 작동합니다. 3) 대규모 데이터 처리 및 메모리에 민감한 환경에 적합하지만 크기가 고정되어 있으므로주의해서 사용해야합니다.

PHP는 파일 업로드를 어떻게 단단히 처리합니까?PHP는 파일 업로드를 어떻게 단단히 처리합니까?Apr 10, 2025 am 09:37 AM

PHP는 $ \ _ 파일 변수를 통해 파일 업로드를 처리합니다. 보안을 보장하는 방법에는 다음이 포함됩니다. 1. 오류 확인 확인, 2. 파일 유형 및 크기 확인, 3 파일 덮어 쓰기 방지, 4. 파일을 영구 저장소 위치로 이동하십시오.

Null Coalescing 연산자 (??) 및 Null Coalescing 할당 연산자 (?? =)은 무엇입니까?Null Coalescing 연산자 (??) 및 Null Coalescing 할당 연산자 (?? =)은 무엇입니까?Apr 10, 2025 am 09:33 AM

JavaScript에서는 NullCoalescingOperator (??) 및 NullCoalescingAssignmentOperator (?? =)를 사용할 수 있습니다. 1. 2. ??= 변수를 오른쪽 피연산자의 값에 할당하지만 변수가 무효 또는 정의되지 않은 경우에만. 이 연산자는 코드 로직을 단순화하고 가독성과 성능을 향상시킵니다.

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25 : Myrise에서 모든 것을 잠금 해제하는 방법
3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

안전한 시험 브라우저

안전한 시험 브라우저

안전한 시험 브라우저는 온라인 시험을 안전하게 치르기 위한 보안 브라우저 환경입니다. 이 소프트웨어는 모든 컴퓨터를 안전한 워크스테이션으로 바꿔줍니다. 이는 모든 유틸리티에 대한 액세스를 제어하고 학생들이 승인되지 않은 리소스를 사용하는 것을 방지합니다.

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

MinGW - Windows용 미니멀리스트 GNU

MinGW - Windows용 미니멀리스트 GNU

이 프로젝트는 osdn.net/projects/mingw로 마이그레이션되는 중입니다. 계속해서 그곳에서 우리를 팔로우할 수 있습니다. MinGW: GCC(GNU Compiler Collection)의 기본 Windows 포트로, 기본 Windows 애플리케이션을 구축하기 위한 무료 배포 가능 가져오기 라이브러리 및 헤더 파일로 C99 기능을 지원하는 MSVC 런타임에 대한 확장이 포함되어 있습니다. 모든 MinGW 소프트웨어는 64비트 Windows 플랫폼에서 실행될 수 있습니다.

PhpStorm 맥 버전

PhpStorm 맥 버전

최신(2018.2.1) 전문 PHP 통합 개발 도구