2012-02-02 25 views
1

我正在爲我們的主要電子商務網站設計一個移動網站。由於該網站由不靈活的遺留代碼組成,因此我選擇查找用戶用戶代理字符串並將其標識爲移動用戶每頁請求。這樣就不需要更改url結構。目前爲止這似乎很有效。用戶在Facebook上的持久標誌?

但是,我認爲這可能是一種很酷的使用這個手機版本,以便用戶可以通過iframe在Facebook上瀏覽我們的電子商務網站(尺寸是完美的)。但是,與移動瀏覽器不同,我無法找到將用戶識別爲Facebook用戶的一貫方式。我知道Facebook在第一次通過iframe查看頁面時發送了一個$ _POST變量,我可以簡單地將它存儲在一個會話變量中並完成它。然而,問題在於,如果用戶使用Facebook訪問,在他們的會話中被標記爲Facebook用戶,然後訪問我們的常規電子商務網站?那麼,他們仍然會被認定爲Facebook用戶,並獲得facebook版本的服務,這並不理想。

回答

1

也許你可以解決另一個角度的問題,並測試網站是否從框架加載或不是?

這是可能的使用javascript:

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

是的,這可能會起作用,初始頁面加載可以接收facebook $ _POST var,這將告訴我通過移動網站設計加載它。之後,ajax腳本可以運行每個頁面請求發送一個標誌,它仍然是從Facebook。但是,這仍然會導致識別一頁時間延遲,所以最好在實際的頁面加載之前發送該標誌,例如服務器端,但我認爲這是不可能的。但這是迄今爲止我所見過的最好主意,我會用方法進行調查,儘管對其他想法仍然持開放態度。 – 2012-02-02 14:58:12

0

不知道這是適當的禮儀回答我的問題,但我找到了答案是Hassou的回答的組合和JavaScript的PHP的檢測腳本。

我修改劇本就是從這裏開始: http://snippets.bluejon.co.uk/check4-js-and-cookies/check4-js-enabled-v2-phpcode.php

本質的想法是使用JavaScript來提交表單引用當前的URL,結果會告訴你,如果啓動Javascript ......不過,這個想法可以只有當javascript在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 else語句中分離出來,並且在任何顯示輸出之前使用代碼上面的代碼塊,這可能更容易處理。請注意,上面的代碼沒有經過測試,只是爲了給其他人提供同樣問題的基本思路。

+1

回答你自己的問題沒有錯,告訴你學到了什麼,並願意分享給可能有同樣問題的其他人。 – Skuld 2012-02-03 15:20:59