>백엔드 개발 >PHP 튜토리얼 >PHP 쿠키 및 세션 메커니즘

PHP 쿠키 및 세션 메커니즘

WBOY
WBOY원래의
2016-10-11 14:23:151009검색

스승님, 저는 쿠키와 세션 메커니즘에 대해 명확히 이해한 적이 없습니다. 배울 수 있는 좋은 정보가 있나요?

답글 내용:

스승님, 저는 쿠키와 세션 메커니즘에 대해 명확히 이해한 적이 없습니다. 배울 수 있는 좋은 정보가 있나요?

실제로 질문을 가지고 검색 엔진에 가면 많은 답변을 얻을 수 있습니다.
쿠키와 세션은 어떤 문제를 해결합니까? 실제로 이 두 가지 문제를 이해한 후에는 어떻게 해야 할까요? 작동 메커니즘을 보시면 자연스럽게 이해가 되실 겁니다.

  1. 쿠키와 세션은 어떤 문제를 해결하나요?

은 상태 비저장(이전 요청과 다음 요청이 동일한 사용자로부터 온 것인지 식별할 수 없음)이라는 http 프로토콜의 본질적인 결함을 보완합니다.

    어떻게 해결하나요?
은 서버 측에
값을 저장하고, 클라이언트가 요청할 때마다 이

를 쿠키를 통해 전송하며, 서버는 이를 구별할 수 있습니다. 동일한 사용자로부터 요청이 왔습니다.key=>valuekey key위 내용은 단순히 쿠키와 세션의 메커니즘에 대한 답변입니다. 구체적인 답변은 이 두 가지 질문으로 검색하시면 됩니다.

구현 원칙을 이해하기 전에 먼저 둘의 역할을 구분하세요.

쿠키 - 브라우저에 존재하는 캐시된 데이터 유형으로, 브라우저(설정)에서 끌 수 있습니다. 브라우저가 쿠키를 끄면 쿠키를 사용할 수 없습니다. 요즘에는 일반적으로 아무도 쿠키를 끄지 않습니다.

쿠키는 브라우저에서 발생하므로

기본적으로 누구나 쿠키를 변경할 수 있습니다

. 안전합니까? 물론 안전하지 않습니다. 그렇다면 이때 어떻게 하면 안전할까요? 예외 없이 Session을 이용해 주시기 바랍니다.
세션(Session) - 이름에서 알 수 있듯이 "세션"은 서버에 저장되며, 이용자의 브라우저에 저장되는 쿠키와는 다릅니다. 그리고 이는 쿠키를 기반으로 합니다. 쿠키가 유효하지 않으면 세션이 제대로 작동하지 않습니다. 세션은 Session_id를 쿠키에 넣기 때문입니다. 웹사이트 서버와 통신할 때마다 서버측 프로그래밍 언어는 쿠키에서 session_id를 얻고 서버에 저장된 세션 데이터를 읽을 수 있습니다. session_id는 매우 중요한 것입니다. 쿠키가 꺼진 후에도 세션을 계속 유용하게 사용하려면 어떻게 해야 합니까? 각 요청에는 session_id를 제공하는 kv가 헤더에 포함되어 있습니다. . . 블라블라블라. . . 아직 이것을 배울 필요는 없다고 생각합니다. 그것은 단지 여담 일뿐입니다.


쿠키 - 사용자가 현재 사용하는 브라우저에 데이터가 저장됨(브라우저를 변경하면 이전 쿠키가 사라짐), 보안이 취약함


세션 - 데이터는 보안이 강력한 서버에 저장됩니다. 브라우저를 변경하면 다시 로그인해야 합니다. 브라우저에 따라 의존하는 쿠키도 다르기 때문입니다.

다음으로 쿠키와 세션을 어떻게 사용하나요? 당신은 그것을 배울 수 있습니다.

세션은 쿠키를 기반으로 구현하거나 매개변수를 가져올 수 있지만 안전하지는 않습니다.

세션과 쿠키의 관계를 대략적으로 이해하려면 MySQL 메모리 테이블을 사용하여 세션 저장소를 구현하는 다음 예를 살펴보세요.


데이터베이스를 기반으로 맞춤형 쿠키 세션 메커니즘을 구현합니다.

이 쿠키는 사용자를 인증해야 할 뿐만 아니라 위조 및 크래킹되어서는 안 됩니다.
<code>CREATE TABLE sessions (
    user_id int(10) unsigned NOT NULL,
    session text NOT NULL,
    md5 char(32) NOT NULL,
    PRIMARY KEY (user_id)
) ENGINE=MEMORY DEFAULT CHARSET=utf8;
其中:
user_id存储的是用户ID,作为主键.
session存储的是用户的会话数组经过serialize或json_encode后的字符串.
md5存储的是session字段的MD5值,用于实现Check And Set版本号乐观锁:
--读取会话
SELECT session, md5 --写入会话时需要用到这里查出来的md5,就是下面的$last_md5
FROM sessions WHERE user_id = $user_id
--写入会话
UPDATE sessions
SET session = $str, md5 = md5($str)
WHERE user_id = $user_id 
AND md5 = $last_md5 --检查MD5,确保session字段没有被修改过</code>

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