2016-08-06 5 views
2

정확히 session_regenerate_id()을 호출하는 경우와 관련하여 매우 구체적인 질문입니다. 세션에서 보안 값을 설정하기 전이나 후에 session_regenerate_id()을 호출하는 것과 차이점이나 보안 위험이 있습니까?보안 값 설정 전후의 세션 ID 재생성

값을 설정하기 전에 :

if ($login_success) { 

    session_regenerate_id(true); 
    $_SESSION['login_status'] = 'logged_in'; 

} 

을 또는 세션에 값을 설정 한 후 :

if ($login_success) { 

    $_SESSION['login_status'] = 'logged_in'; 
    session_regenerate_id(true); 

} 

답변

2

이것이 작동하는 방법입니다. session_regenerate_id()은 세션 ID를 만들고 변경하며 세션을 새 파일로 전송하고 쿠키를 보냅니다. 인수로 true을 전달하면 이전 세션 파일도 삭제되고 인수는 생략됩니다.

그래서, 당신은 사용 여부를

session_regenerate_id(true); 
$_SESSION['login_status'] = 'logged_in'; 

또는

$_SESSION['login_status'] = 'logged_in'; 
session_regenerate_id(true); 

은 동일합니다 정보를 새 파일로 재 작성하고, 쿠키가 발송됩니다. 언제든지 이전 세션 하이재킹을 피하기 위해 언제든지 true을 인수로 사용하는 것이 좋습니다.

+0

귀하의 답변은 완벽하게 정확하며 입력에 대해 감사하지만 실제로 문제가되지 않습니다. 다른 프로그래머들에게 혼란을 피하기 위해 나는 대답을 바꾸었다. 어떤 말장난 의도 (나는 당신의 대답을 upvoted). – Nitin

1

효과적으로 동일합니다; 세션 정보는 실제로 session_write_close()를 호출 할 때만 유지됩니다 (또는 스크립트가 끝날 때 암시 적으로). 따라서 데이터는 이전 ID에 대해 유지되지 않습니다.

+0

안녕하세요 @ session_write_close() 및 session_start()를 암시 적으로 session_regenerate_id()를 호출했거나 직접 변경 사항을 유지하기 위해 재생성, 값 변경, 세션 닫기 및 세션 결합이 필요합니까? – Nitin

+1

@Nitin, 이것은 PHP입니다. 거래가 곧 끝나고 헤더 (쿠키)가 클라이언트로 전송됩니다. 따라서 세션을 닫은 다음 재생성 후 세션을 다시 시작할 필요가 없습니다. –