2014-10-06 3 views
0

결정된 PHP 세션이 설정된 경우에만 페이지를 캐시해야합니다.
내가 다음 코드를 사용하고, 그렇게하려면조건이 만족되면 캐시

session_start(); 
if(isset($_SESSION['bot'])){ 
$etagFile = md5_file(__FILE__); 
header("Expires: " . gmdate("D, d M Y H:i:s", time() + 31556926) . " GMT"); 
header("Etag: $etagFile"); 
header('Cache-Control: private'); 
die('You\'ve been banned.'); 
} 
echo 'Some content'; 

문제는 세션이 만료 때 그가를 위해 "당신은 금지했습니다"볼 수 있지만, 사용자가 '일부 콘텐츠'를 볼 수 있다는 것입니다 년.
error_reporting(E_ALL); 아무 것도 반환하지 않습니다.
무엇이 문제 일 수 있습니까?

+1

'$ _SESSION'을 사용하면 봇 (bot)이 매우 효율적으로 작동하지 않습니다 쿠키를 끄기 만하면 – sjagr

+0

@ sjagr 네 말이 맞아, 생각하지 않았어. 메시지를 캐시하는 스크립트는 간단한 확인 방법을 사용하여 봇을 탐지하자마자 실행되지만 봇이 방문하려고하는 모든 페이지에 대한 경고를 캐싱 할 계획이었습니다. 다른 해결책을 찾아야 만하는 것처럼 보입니다. 그 점을 지적 해 주셔서 감사합니다 :) – Stubborn

답변

1

코드에는 버그가 없지만 논리 결함이 있습니다. "세션 만료"동작을 어떻게 구현하고 있습니까?

PHP 세션을 사용할 때 기본적으로 쿠키를 사용합니다. 사용자가 쿠키를 삭제하거나 세션을 종료하여 세션을 종료하면 사용자를 추적하지 않습니다. 세션은 모든 세션 변수와 함께 사라 졌으므로 어떻게 든 다시 만들어야합니다.

내가하고 싶은 것을 모른 채 많이 알 수는 없습니다. 그러나 사용자를 차단하려면 로그인 시스템을 사용하는 것이 좋습니다.

업데이트 : 봇을 금지하려고 시도한 것으로 보입니다. 세션을 사용해서는 안됩니다. 가장 좋은 방법은 IP 주소를 사용하고 요청의 헤더를 확인하여 봇 식별자를 확인하는 것입니다 (정중 한 로봇 인 경우에는 자신을 식별 할 수 있습니다)

+0

답변 주셔서 감사합니다, 나는 당신의 제안을 따르 겠어 :) – Stubborn