2012-02-02 3 views
1

메인 전자 상거래 사이트의 모바일 사이트를 디자인하는 중입니다. 이 사이트는 유연하지 않은 레거시 코드로 구성되어 있기 때문에 사용자 사용자 에이전트 문자열을 조회하여 각 페이지 요청을 모바일 사용자로 식별했습니다. 그런 식으로 URL 구조를 변경하지 않아도됩니다. 이것은 지금까지 잘 작동하는 것 같습니다.사용자가 페이스 북에있는 영구 플래그입니까?

그러나이 모바일 버전을 사용하면 멋지다고 생각하여 사용자가 iframe (크기가 완벽 함)을 통해 페이스 북에서 Google 전자 상거래 사이트를 탐색 할 수 있습니다. 그러나 모바일 브라우저와 달리 사용자를 페이스 북 사용자로 식별하는 지속적인 방법을 찾는 데 어려움을 겪고 있습니다. iframe을 통해 처음으로 페이지를 볼 때 facebook이 $ _POST 변수를 보내는 것을 알고 있으며, 간단히 세션 변수에 저장하고 완료 할 수 있습니다. 그래도 사용자가 페이스 북을 방문하고 세션에서 페이스 북 사용자로 표시되면 일반 전자 상거래 사이트를 방문하면 어떤 문제가 발생합니까? 글쎄, 그들은 여전히 ​​페이스 북 사용자로 확인 될 것이고, 이상적이지 않은 페이스 북 버전을 제공 받는다.

답변

1

어쩌면 다른 각도로 문제를 해결하고 웹 사이트가 프레임에서로드되었거나 아닌지 테스트 할 수 있습니까?

이 자바 스크립트 가능합니다 : 그것은 내 자신의 질문에 대답하기 위해 적절한 에티켓입니다하지만 난 Hassou의 대답의 콤보와 자바 스크립트 PHP를 감지 스크립트입니다 해답을 발견

if (top === self) { 
    //not a frame 
} else { 
    //a frame 
} 
+0

예, 작동 할 수도 있습니다. 초기 페이지로드는 모바일 사이트 디자인을 통해로드하라는 페이스 북 $ _POST var을 수신 할 수 있습니다. 그런 다음 ajax 스크립트는 각 페이지 요청을 실행하여 여전히 페이스 북에서 보내는 플래그를 보낼 수 있습니다. 그러나 여전히 식별을 위해 한 페이지 지연이 발생할 수 있으므로 서버 측과 같은 실제 페이지로드 전에 플래그를 보내도록하는 것이 바람직하지만 가능하지는 않습니다. 그러나 그것은 지금까지 보아온 최고의 아이디어입니다. 다른 아이디어에도 여전히 열려 있지만, 방법을 사용하여 조사 할 것입니다. –

0

확실하지합니다.

내가 변경 스크립트는 여기에서있다 : 는 http://snippets.bluejon.co.uk/check4-js-and-cookies/check4-js-enabled-v2-phpcode.php

기본적 아이디어는, 결과는 당신을 JavaScript가 활성화되어 있으면 ... 그러나, 아이디어는 수 알려줍니다 현재 URL을 참조하는 양식을 제출 자바 스크립트를 사용하는 것입니다 iframe에 자바 스크립트가 true를 반환하는 경우에만 양식을 제출하도록 쉽게 변경할 수 있습니다. 그런 다음 $ _POST 데이터를 양식에 전달하여 $ _POST 데이터가 넘겨 지도록 할 수 있습니다 ($ _POST 데이터가 응용 프로그램의 표시 레이어 내에서 참조되는 경우에만 필요함). 여기에 기본적인 아이디어 :

<?php 
/* Include head of your application goes here, this should do whatever 
session handling code you have and all processing done to the $_POST variables */ 

// ~~~~~~Full Url Function - Works With Mod_Rewrite~~~~~~~~~ // 
// important thing is function will grab all $_GET vars 
function fullurlnav() 
{ 
$fullurlsortnav = 'http'; 
$script_name = ''; 
    if(isset($_SERVER['REQUEST_URI'])) 
    { 
    $script_name = $_SERVER['REQUEST_URI']; 
    } 
    else 
    { 
    $script_name = $_SERVER['PHP_SELF']; 
    if($_SERVER['QUERY_STRING']>' ') 
    { 
    $script_name .= '?'.$_SERVER['QUERY_STRING']; 
    } 
    } 

    if(isset($_SERVER['HTTPS']) && $_SERVER['HTTPS']=='on') 
    { 
    $fullurlsortnav .= 's'; 
    } 

$fullurlsortnav .= '://'; 

    if($_SERVER['SERVER_PORT']!='80') 
    { 
    $fullurlsortnav .= 
    $_SERVER['HTTP_HOST'].':'.$_SERVER['SERVER_PORT'].$script_name; 
    } 
    else 
    { 
    $fullurlsortnav .= $_SERVER['HTTP_HOST'].$script_name; 
    } 

return $fullurlsortnav; 
} 
// ~~~~~~~~~~~End Full URL Function~~~~~~~~~ // 
?> 
<html> 
<body> 
<?php 
// Only run this check if user has been identified as a facebook user in their session 
// or if they've been identified via the $_POST['signed_request'], which facebook sends 
// upon first request via iframe. 
// Doing this removes the check when it's unneeded. 
if (!isset($_POST['inIframe']) && (isset($_SESSION['inIframe']) || isset($_POST['signed_request']))) 
{ 
?> 
    <form name="postJs" action="<?php echo fullurlnav(); ?>" method="post"> 
    <input type="hidden" name="inIframe" value="1"> 
    <?php 
    // Carry over $_POST 
    foreach($_POST as $key => $value) 
    { 
    echo '<input type="hidden" value="'.$value.'" name="'.$key.'" />'; 
    } 
    ?> 
    </form> 
    <script type="text/javascript"> 
      <!-- 
      // If in an iframe 
      if (top !== self) 
      { 
      document.postJs.submit(); 
      } 
     //--> 
    </script> 
    <?php 
} 
elseif(isset($_POST['inIframe']) && (isset($_SESSION['inIframe']) || isset($_POST['signed_request']))) 
{ 
$_SESSION['inIframe']=1; 
} 
else 
{ 
$_SESSION['inIframe']=0; 
} 

if ($_SESSION['inIframe']== 1){ 
echo 'IS in an Iframe'; 
}else{ 
echo 'IS NOT in an Iframe'; 
} 

// echo out rest of your template code 
?> 
</body> 
</html> 

그것은 당신의 페이지 표시 코드 출력 주위에 조금 까다로운 스케이트를 얻을하고 동작을하지만 그건 내가 지금까지 가지고있는 기본적인 생각입니다. 기술적으로 폼 생성 블록을 아래의 elseif 문과 분리하여 디스플레이 출력 전에 코드 위에있는 것을 사용하면 처리하기가 더 쉽습니다. 위의 코드는 테스트되지 않았으므로 같은 문제가있는 다른 사람들을위한 기본적인 아이디어를 제공하기 위해 제공되었습니다.

+1

자신의 질문에 답하는 데 아무런 문제가 없으며, 배운 것을 보여주고 같은 문제가있는 다른 사람들에게 기꺼이 나누어 줄 수 있습니다. – Skuld

관련 문제