사용자 추적: 쿠키와 세션
웹서버 : 식료품 직원
웹 클라이언트 : 고객
웹클라이언트 주문(/catalog/yak.php 부탁드립니다) -> 서버는 전자적으로 php의 도움을 받아 그에 상응하는 응답 생성
->php엔진과 웹서버는 쿠키를 통해 고객의 정보를 기억하여 요청에 응한다.
->웹서버와 php엔진은 쿠키를 통해 웹 클라이언트를 식별할 수 있다.
->웹클라이언트는 요청을 생성할 때마다 쿠키를 함께 실어보낸다.
->엔진이 쿠키를 읽고 이전의 요청에 동봉됐던 쿠키와 같은 쿠키임을 확인하면,
해당요청 역시 웹클라이언트에서 들어왔음을 알게 된다.
쿠키는 이름("customer")과 값("77")으로 구성된다.
단일쿠키는 하나의 정보를 지속해서 유지할 때 가장 유용하다.
여러가지 정보를 지속해서 유지해야할 경우에는 php의 세션을 활용
세션은 쿠키를 이용해 사용자를 식별하며 각 사용자의 데이터 모음을 서버에 임시 저장한다.
쿠키 설정 setcookie() 함수 사용
이 함수를 호출하면서 쿠키명과 값을 지정하면 웹 클라이언트가 기억해두었다가 요청에서 서버로 되돌려준다.
값은 문자열이나 숫자
setcookie()를 호출하면 php엔진이 웹 클라이언트에 되돌려줄 응답을 생성할 때 특수한 헤더가 추가된다.
이 헤더는 새로 생성할 쿠키와 관련한 정보를 갖고 있다.
일반적으로 setcookie()는 웹페이지가 아직 아무런 출력을 하지 않았을 때 호출해야한다.
또한 setcookie() 함수를 실행하기 전에는 페이지의 시작 태그인 <?php>
쿠키정보는 웹클라이언트가 쿠키 정보를 담긴 요청을 보냈을 때만 $_CCOKIE에 저장
setcookie()를 호출한다해도 그 즉시 저장되지 않는다.
쿠키의 도메인 설정
setcookie('short-userid','ralph',0,'/','.example.com');
setcookie()에 지정하는 도메인은 서버명의 끝부분과 반드시 일치해야한다.
쿠키 지우는 방법
setcookie('short-userid','');
만료 시각이나 도메인을 기본값이 아닌 특정한 값으로 설정한 쿠키는 삭제할 때도 동일한 설정값을
사용해야 올바르게 삭제된다.
세션활성화
기본적으로 세션은 PHPSESSID라는 쿠키를 사용한다. PHP 엔진은 페이지에서 세션을 시작할 때 이 쿠키가 있는지 확인하고 존재하지 않으면 생성한다. 각 웹 클라이언트는 서로 다른 세션 아이디를 부여 받는다.
페이지에 세션을 사용하려면 스크립트가 시작되는 지점에서 session_start()를 호출한다
이 함수는 setcookie()처럼 출력이 전송되기 전에 호출되어야 한다.
session.auto_start를 On으로 설정
세션데이터는 자동 전역변수인 $_SESSION 배열에 저장된다. 이 배열의 원소들을 읽거나 변경하는 방식으로 세션 데이터를 다룰 수 있다.
세션 설정
세션 데이터의 지속시간 : 24분
세션은 사용자 정보를 영구적으로 저장하고자 사용하는 기능이 아니다.
세션은 사용자의 활동을 추적하여 더욱 원활한 브라우징 경험을 실현하는데 사용
session.gc_maxlifetime 설정 지시자는 요청이 반복되기까지 얼마나 오랫동안 세션 활동을 유지할 것인지 결정 기본값은 24분
ini_set() 함수는 session_start보다 먼저 호출해야한다.
로그인 과정에서 사용자는 두가지 정보 제공
1. 사용자 신원을 나타내는 정보
2. 그것을 증명하는 정보(비밀번호)
세션을 기반으로 사용자 로그인을 추가하는 과정
1. 사용자명과 비밀번호를 요청하는 폼 출력
2. 폼 제출 확인
3. (제출된 비밀번호가 맞다면) 사용자명을 세션에 추가
4. 인증된 사용자만 할 수 있는 작업에서 세션의 사용자명 확인
5. 사용자가 로그아웃하면 세션의 사용자명 삭제
validate_form : 제공된 사용자명과 비밀번호의 유효성을 검사하는 역할을 담당
process_form : 사용자명을 세션에 추가
setcookie()와 session_start()가 페이지 맨위에 있어야하는 이유
웹서버가 웹 클라이언트에 응답을 전송할 때 응답 내용의 대부분은 HTML 문서가 차지한다.