phpsource/회원인증2000. 10. 10. 15:49
로그아웃을 통한 세션 정보 삭제
방문자는 로그아웃을 통하여 쿠키 또는 세션 변수에 저장된 세션 정보(회원인증ID 및 기타 정보)를 삭제합니다.
쿠키값을 삭제하는 방법
로그아웃할 때 쿠키정보를 삭제하려면 아래와 같이 합니다.
[code php;gutter:false] if ($HTTP_COOKIE_VARS["member_id"]) { SetCookie("member_id"); SetCookie("member_name"); SetCookie("member_email"); SetCookie("member_homepage"); } [/code]
또는,
[code php;gutter:false] if ($HTTP_COOKIE_VARS["member_id"]) { SetCookie("member_id","",time()); SetCookie("member_name","",time()); SetCookie("member_email","",time()); SetCookie("member_homepage","",time()); } [/code]
세션변수를 삭제하는 방법
로그아웃할 때 아래와 같이 session_destroy() 함수를 이용하여 세션 정보를 삭제합니다.
[code php;gutter:false] session_destroy(); [/code]
로그아웃을 통하지 않고 종료하는 경우의 보안 문제
로그아웃을 하지 않고 현재의 회원전용 웹사이트를 떠나게 된다면 서비스 받는 동안에 생성된 각종 세션 정보들이 그대로 쿠키 또는 세션 변수에 남아 있게 됩니다. 이와 같이 회원이 이러한 세션 정보를 삭제하지 않고 컴퓨터가 있는 자리에서 떠났을 때 회원이 아닌 다른 사람이 동일한 컴퓨터를 통하여 회원의 정보를 엿볼 수 있을 것입니다. 보안상 심각한 문제가 발생하는 것이지요. 그런데 일반적으로 보면 대부분의 방문자들은 로그아웃을 하지 않고 다른 웹사이트로 떠나게 됩니다. 회원 전용 웹사이트 개발자는 이런 경우에 발생할 수 있는 보안 문제에 대해서도 적절히 대처하여야 합니다. 이를 해결하는 방법으로 세션 변수의 지속시간이라는 것을 사전에 설정하게 됩니다. 즉, 회원전용 웹사이트에 마지막으로 접속한 후 일정시간동안 접속이 없으면 자동으로 세션 정보를 삭제하는 기능입니다. 이 지속시간은 보통 20분으로 설정하게 되는데 서버 관리자나 웹사이트 관리자가 필요에 따라 임의 설정하게 됩니다.
일정시간이 경과한 후에 자동으로 세션 정보 삭제
대부분의 방문자는 사용이 불편하다는 이유로 로그아웃을 거치지 않고 회원전용 웹사이트를 떠나게 됩니다. 이 때에는 이미 발급된 회원인증서 관련 정보들이 웹서버와 방문자 PC에 그대로 남아 있게 됩니다. 이것은 회원 정보 보안에 문제가 될 수 있으므로 방문자가 로그아웃을 거치지 않고 떠났다 하더라도 회원이 서비스를 종료하였는지를 판단하여 로그아웃 과정을 대신에 자동으로 수행하여야 합니다. 방문자가 회원전용 웹사이트를 마지막으로 접근한 이 후에 일정시간이 지나면 방문자가 회원전용 웹사이트를 떠났다고 판단하는 것이 좋습니다. 20분정도 지나도록 접속이 없으면 종료처리하는 것이 보통입니다.
때에 따라서는 세션 정보를 데이터베이스에 저장하는 경우도 있을 겁니다. 이런 경우는 데이터베이스 레코드에 생성되는 시간을 저장할 수 있는 필드를 추가한 후 이 필드에 세션 정보가 생성되거나 갱신되는 시간을 저장합니다. 이 후에 임의의 세션에서 이 테이블에 접근할 때 각 레코드가 만들어진 시간을 확인해서 갱신한 지 일정시간이 지난 레코드를 삭제해 주면 됩니다.
[code php;gutter:false] $table = "session_info"; $lifetime = 20; // 세션 지속 시간을 분단위로 지정 $sql = "DELETE FROM $table" . " WHERE lastused < DATE_SUB(NOW(), INTERVAL $lifetime MINUTE)"; mysql_query($sql); [/code]
HTTP 인증을 통한 로그인을 하였을 때 로그아웃의 문제
HTTP 인증을 통한 로그인을 하게 되면 $PHP_AUTH_USER을 얻게 되고 이를 통해 사용자 인증을 하게 되는데, $PHP_AUTH_USER 인증값은 브라우저를 종료하기 전까지는 계속 그 값이 유지하게 됩니다. 따라서 명시적으로 로그아웃을 할 수 없게 됩니다.

Posted by 방글24