2009-12-11 2 views
1

일반적으로 추천자를 기반으로 웹 사이트는 사이트 - 홈, 페이지 A, 페이지 B 등의 다른 페이지에 링크가있는 메뉴 모음 ..PHP, 세션 상태가 "홈"이 링크

의 말합시다있다 주소가 http://www.example.com 인 사이트가 있습니다. 99 %는 누군가가 브라우저에 URL을 입력하면 "집"으로 표시된 페이지로 이동합니다. 선택적 확장자는 색인 [.html | .php]입니다 (예 : http://www.example.com/index.html). 그러나 사용자가 웹 사이트를 방문 할 위치에 따라 다른 페이지로 리디렉션하려는 유스 케이스가 있습니다. 예를 들어 페이지를 홍보하는 사이트에 광고가있는 경우 http://www.example.com/camefromad.html으로 리디렉션하면 일반 '홈'페이지와 거의 비슷하게 보이지만 약간의 텍스트를 추가하면 그들은 광고가 있던 페이지에서 왔습니다.

내 질문은 : 사용자가 "홈"링크를 클릭하면 항상 http://www.example.com/camefromad.html로 이동합니다 있도록 PHP를 사용하려면 참조 페이지에서 사이트에 착륙 한 후

수있는 방법이 있나요 IF 사용자가 먼저 착륙 했습니까? 내가 피하려고하는 것은 사용자가 http://www.example.com/camefromad.html으로 이동 한 다음 메뉴 모음에서 "홈"을 클릭하고 http://www.example.com/camefromad.html 페이지로 돌아 오지 못하게하는 것입니다. 일반 사용자가 거기에 갈 수 없기 때문에 공개 메뉴에서 해당 방문 페이지를 사용할 수 있습니다.)

이것은 PHP를 처음 사용하는 경우이며 세션 상태 등을 사용하여 함께 조각하려고하는데 아직 퍼즐을 아직 완성하지 못했습니다. 저는 여기에 "홈"링크를 나타내는 파일이다 ( index.php를 에있는 것입니다 : 사용자가 사이트에 올 때 내 생각이 변수를 설정하는 것입니다, 기본적으로

<? 
session_start(); 
$_SESSION['amSet']= 0; 
?> 

<? 
if ($_SESSION['amSet'] == 0) { 
    if (!empty($_SERVER['HTTP_REFERER'])) { 
    $referrer = $_SERVER['HTTP_REFERER']; 
    $_SESSION['amSet'] = 1; 
    } 
} 
if (preg_match("/other.example.net/",$referrer)) { 
    header('Location: http://example.com/camefromad.html'); 
} 
?> 

가되도록 리퍼러 변수가 해당 추천 사이트로 설정되어 있지만 사용자가 사이트 자체의 링크를 클릭하면 리퍼러를 재설정하지 않아도됩니다. 사용자가 사이트를 처음 방문했을 때 머물러 있기를 원합니다. 사용자가 "홈"링크를 클릭하면 항상 해당 페이지로 연결됩니다. 분명히 위의 코드는 작동하지 않습니다.

+0

을, 레퍼러와 접근 방식은 올바르지 만이 힘 있음을 알아 두셔야합니다 일부 사용자가 리퍼러를 보내지 못하게하거나 (가짜를 보내면) 매번 작동하지 않습니다. –

답변

1

왜 세션 변수에 referer를 저장하지 않습니까? 방문 페이지에서 이있을 수 있습니다 :

<?php 
session_start(); 
if(empty($_SESSION['comeFrom']) && !empty($_SERVER['HTTP_REFERER'])){ 
    $_SESSION['comeFrom'] = $_SERVER['HTTP_REFERER']; 
} 
?> 

을 그리고, 홈 페이지 : 일반적으로

<?php 
session_start(); 
if(!empty($_SESSION['comeFrom']) && 
    preg_match("/referrerSite.com/",$_SESSION['comeFrom'])){ 
    header('Location: http://www.example.com/camefromad.html'); 
} 
?> 
+0

우수 Arkh. 감사!위의 설명에서 언급 한 공백 문제를 수정 한 후에이 코드를 적용하여 처음에가는 경로보다 훨씬 더 깨끗한 것으로 보이고 모든 것이 잘 작동하는 것 같습니다. –

2

거의 다 왔어! _SESSION 변수. 그럼 당신은 후속 페이지 요청에 $ _SESSION [ 'referrer']이 설정되어 있는지 확인하고 그에 따라 작동 할 수 있습니다.

+0

감사합니다. Janek. 나는 나의 초기 문제가 무엇인지 깨달았다. 이 "헤더 정보를 수정할 수 없습니다"라는 오류가 발생했습니다. 첫 번째?> 두 번째 사이에 공백이 있었기 때문입니다. 내 코드에서. –