2012-01-06 3 views
0

나는 세션 관리를 할 수 있도록 로그인/로그 아웃을 사용하는 webapp를 가지고 있습니다. 기본적으로 모든 페이지는 지금까지객체 지향 PHP 세션 관리

으로 시작합니다.
session_start(); 
if(!isset($_SESSION['username'])) {header("Location: index.php");} else { rest of the page's functionality} 

저는 이제 클래스 (User.php)를 만듭니다. 다른 .php 페이지에서 액세스 할 수 있습니다. 보안을 위해 위의 내용을 구현해야합니까? 그렇다면 어떻게해야합니까? Webroot 위에 클래스를 두어야합니까? 감사합니다.

답변

1

내가 먼저 생각해 봤 겠지만; 세션에서 사용자 이름이 설정되어 있는지 확인하는 것은 특별히 저장하지 않습니다. 사용자가 로그인했는지 확인하려면 몇 가지 추가 테스트가 있어야합니다.

질문에 답하십시오. 로그인 한 사용자가없는 경우에도 페이지가 User 클래스에 액세스 할 수 있습니다 (예 : 특정 사용자의 공개 코멘트를 블로그 게시물에 표시하려는 경우). 그래서 아니오, 당신의 시험은 필요 없을 것입니다. 또한 사용자가 User 클래스에 로그인했는지 (또는 더 좋은지, 주변에 빌드 할 인증 클래스), 따라서 다음과 같이 할 수 있습니다.

if(Authentication::is_logged_in($_SESSION['username']) === true) { 
    echo 'yeeehaaaa! You\'re logged in bro!'; 
} else { 
    echo 'what are you doing here?! Get lost! (or log in)'; 
} 
+0

감사합니다. 사용자가 로그인했는지 확인하기 위해 다른 보안 조치를 취해야합니까? 누군가가 if (! isset ($ _ Session [ 'username'])) 보안을 어떻게 지나칠 수 있습니까? – user1114

+0

만료 (예 : 로그인 후 1 시간)를 확인하기 위해 타임 스탬프를 저장할 수 있지만 예를 들어 암호 해시가 확실히 생성 될 수 있습니다. 타임 스탬프, (암호화 된) 암호, 상수 및 클라이언트 공개 IP. 이렇게하면 누군가가 세션을 도용하지 못하게됩니다. 해시는 로그인 할 때 생성되고 가상 is_logged_in() 함수가 호출 될 때마다 검사됩니다. – giorgio