2012-11-08 5 views
2

로그인 스크립트를 php-login.net에서 수정하고 보안을 강화하려고합니다. .PHP 쿠키와 세션 변수

/** 
* write user data into PHP SESSION [a file on your server] 
*/ 
    $_SESSION['user_name'] = $result_row->user_name; 
    $_SESSION['user_email'] = $result_row->user_email; 
    $_SESSION['user_logged_in'] = 1; 

/** 
* write user data into COOKIE [a file in user's browser] 
*/ 
    setcookie("user_name", $result_row->user_name, time() + (3600*24*100)); 
    setcookie("user_email", $result_row->user_email, time() + (3600*24*100)); 
    $this->user_is_logged_in = true; 

불행한 부분에 사용자가 로그인 페이지에서, 아무도에 대한 사용자 액세스를 획득가 있는지 확인하기 위해 수표를 쓴 경우이 특정 로그인 스크립트 쿠키 및 세션 모두 변수를 설정 로그인 클래스가 사용자가 해당 페이지에 접속하면 로그인했습니다. 따라서 URL에 직접 입력하면 사람이 로그인 할 필요가 없습니다.

사용자가 로그인했는지 확인하는 가장 좋은 방법을 알고 싶습니다. 현재이 방법을 사용하고 있지만 사용하고 있습니다. 그것은 중복인지 알지 못합니다. (의미 : 쿠키 변수는 항상 세션 변수와 같으므로 두 가지를 모두 체크 할 필요가 없습니까?) 모든 입력이 도움이됩니다.

session_start(); 
if(!(isset($_COOKIE['user_email']) && 
    isset($_SESSION['user_email']) && 
    ($_COOKIE['user_email']===$_SESSION['user_email']) && 
    isset($_COOKIE['user_name']) && 
    isset($_SESSION['user_name']) && 
    ($_COOKIE['user_name']===$_SESSION['user_name']) && 
    isset($login) && 
    $login->isUserLoggedIn())){ 
     header("location:../../index.php"); 
     exit; 
    } 

+4

와우. 처음부터 시작하십시오. –

+0

그레이트 스콧! 나는 @Relentless와 동의한다. 그러나 기존 코드를 계속 진행해야하는 경우 세션 확인 만 권장합니다. 쿠키를 스크랩하십시오. – PenguinCoder

+4

예, 쿠키가 중복되었습니다. 이미 서버 측 세션 변수를 가리키는 클라이언트 측 쿠키가 있습니다. – Delta

답변

2

세션을 사용하여 이미 매핑하는 세션 ID와 쿠키의 존재가 (저조한 형식의 코드에 대한 죄송합니다, 나는 여전히이 사이트에 텍스트 형식의 뉘앙스를 알아 내려고 노력하고 있어요) 서버 측 PHP 세션. 거기에 등록한 모든 데이터는 전역 $ _SESSION 배열에서 사용할 수 있습니다. 쿠키뿐만 아니라 서버에 데이터를 저장하는 것은 일반적으로 무의미합니다.

같은 도메인 이름에 쿠키 데이터를 공유해야하는 사이트가 더있는 경우에만 데이터를 쿠키에 저장할 수 있습니다.

+0

그래서 시스템을 몇 번 재시작 한 후 며칠/몇 주 후에 사용자가 로그인하더라도 쿠키에 데이터를 커밋 할 필요가 없습니까? 클라이언트가 브라우저 히스토리를 지울 때까지'session_set_cookie_params ($ cookieParams [ "lifetime"]')를 특정 값으로 설정해야합니까? 기본적으로 클라이언트 브라우저가 내 웹 사이트와 로그 된 것을 어떻게 기억하게합니까? –

+1

세션 쿠키의 유효 기간은 클라이언트 측 쿠키 2 개와 php.ini 파일에 설정된 세션 수명 및 가비지 콜렉션 수명입니다. 둘 다 필요합니다. 당신이 긴 세션 기간을 원한다면 높게 설정하십시오. –

+0

어제, 가비지 컬렉터에 대해 배웠고 ini 파일의 매개 변수를 변경했습니다 ... 나는 그런 설정을했습니다. 폴더에 어떤 일이 일어나는지보고 너무 많은 정보를 저장하는 것을 피하는 폴더 ... 너무 복잡해지기 시작한 경우 이미 토큰 및 데이터베이스 검사로 해결 방법을 찾았습니다. 로그에 기록하지 않겠지 만 누구나 n,하지만 아마도 일부 양식 필드를 채우기 만하면됩니다. 도움을 주셔서 감사합니다 ^^ –