Head First PHP & MySQL - 7장: "개인화 웹 애플리케이션 제작하기"에서..
- SHA() 함수의 반환 값은 40개의 문자로 구성된 16진수 문자열임. SHA는 'Secure Hash Algorithm'의 약자. MySQL에는 SHA()와 비슷한 기능을 제공하는 MD5() 함수가 있다. 하지만 SHA() 함수가 사용하는 알고리즘이 일반적으로 더 안전하다고 평가되고 있어, SHA()를 사용하는 것이 더 좋다. PHP도 같은 기능의 암호화 함수 (sha1(), md5())를 제공한다.
- HTTP 인증이 해제되는 시점은 브라우저가 종료될 때 뿐이다. 다시 말해 HTTP인증을 사용해 로그인한 웹 애플리케이션에서 로그아웃하려고 할 때는 웹 브라우저를 종료하거나 사용자 스스로 HTTP 인증 세션을 종료하는 방법이 유일하다.
- 쿠키에 만기 시점을 정하지 않으면 브라우저를 종료함과 동시에 삭제된다.
- 세션 변수에는 만기 시점이 지정되어 있지 않다. 세션 변수는 세션 변수가 포함된 세션이 종료되는 시점에 자동으로 세션과 함께 삭제되기 때문이다. 보통 하나의 세션이 종료되는 시점은 브라우저가 종료되는 시점과 일치한다.
- $session_destroy(); (세션을 종료하는 함수) - 이 함수를 호출해 세션을 종료하더라도 모든 세션 데이터가 함께 삭제되는 것인 아니다. session_destroy() 함수는 세션 변수 자체를 삭제하는 기능을 갖지 않는다. 그러므로 사용자가 브라우저를 종료하기 전에 세션 변수를 삭제해 로그아웃 기능을 수행하려면 여러분이 직접 세션 변수를 삭제해야 한다. 세션 변수를 삭제할 수 있는 쉽고 효과적인 방법은 $_SESSION 초전역 변수를 빈 배열로 초기화하는 것이다.
$_SESSION = array();
하지만 이걸루 끝이 아님. 세션은 보이지 않는 곳에서 쿠키를 사용한다. 브라우저가 쿠키를 허용하는 사용 환경에서 세션은 세션 ID를 임시로 쿠키에 저장한다. 즉, PHP코드를 통해 세션을 완벽히 종료하려면 세션 ID를 저장하기 위해 사용한 임시 쿠키도 삭제해야 한다.
- 쿠키를 활용할 수 있는 환경이라면 서버는 세션 ID를 쿠키에 저장한다. 반면 쿠키를 활용할 수 없는 환경이라면 세션 ID는 각 페이지의 URL을 통해 전달된다.
- HTTP 인증은 웹 페이지 접근을 통해서만 위해 사용할 수 있는 간편한 방법이지만, 인증을 해제하기 위한 로그아웃 기능을 제공하지는 못한다
- 세션이 이미 시작된 상태라면 session_start() 호출은 항상 새로운 세션을 생성하는 것이 아니라 기존의 세션을 호출하는 역할을 한다.
- 쿠키를 사용하지 않는 세션은 php.ini 설정 파일에서 적절히 설정하지 않으면 작동하지 않을 것이다. 이를 위해서는 웹 서버의 php.ini 파일의 session.use_trans_id의 값을 '1(true)'로 설정해야 한다. 웹 서버에 접근해 php.ini 파일을 수정할 권한이 없다면 세션 ID를 수동으로 요청 URL에 덧붙여야 한다.
<a href="viewprofile.php?<?php echo SID; ?>">view your profile</a>
SID 초전역 변수는 세션 ID를 저장하고 있음. 페이지 요청 시 세션ID를 함께 전송함으로써 개인 프로필 조회 페이지는 세션 정보에 접근할 수 있음.
- 세션은 단기간 유지할 데이터를 저장하는데 사용하면 좋은 반면 쿠키는 오랜 기간 데이터를 유지해야 할 상황에서 활용하면 좋습니다.