1

メインの e コマース サイトのモバイル サイトを設計中です。このサイトは柔軟性に欠けるレガシー コードで構成されているため、ユーザーのユーザー エージェント文字列を調べて、ページ リクエストごとにユーザーをモバイル ユーザーとして識別することにしました。そうすれば、URL 構造を変更する必要はありません。これは今のところうまく機能しているようです。

しかし、ユーザーが iframe 経由で Facebook の e コマース サイトを閲覧できるように、このモバイル バージョンを使用するのはちょっとクールかもしれないと思いました (寸法は完璧です)。しかし、モバイル ブラウザーとは異なり、ユーザーを Facebook ユーザーとして識別する永続的な方法を見つけるのに苦労しています。iframe 経由で初めてページが表示されたときに、Facebook が $_POST 変数を送信することはわかっています。それをセッション変数に格納するだけで完了できます。ただし、発生する問題は、ユーザーが facebook でアクセスし、セッションで facebook ユーザーとしてマークされてから、通常の e コマース サイトにアクセスした場合はどうなるでしょうか? まあ、彼らはまだ Facebook ユーザーとして識別され、Facebook バージョンが提供されますが、これは理想的ではありません。

4

2 に答える 2

1

別の角度から問題に取り組み、Web サイトがフレームからロードされているかどうかをテストできますか?

これはJavaScriptで可能です:

if (top === self) { 
   //not a frame 
} else { 
   //a frame 
}
于 2012-02-02T14:47:35.160 に答える
0

自分の質問に答えるのが適切なエチケットかどうかはわかりませんが、ハッスーの答えとjavascript php検出スクリプトの組み合わせである答えを見つけました。

私が変更したスクリプトはここからです: http://snippets.bluejon.co.uk/check4-js-and-cookies/check4-js-enabled-v2-phpcode.php

基本的には、javascript を使用して現在の URL を参照するフォームを送信するという考え方です。結果は、javascript が有効になっているかどうかを示します。次に、$_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 ステートメントから分離し、表示出力の前にコードの上でそれらを使用すると、処理が簡単になる場合があります。上記のコードはテストされていないことに注意してください。同じ問題を抱えている他の人に基本的なアイデアを提供するために与えられたものです。

于 2012-02-03T15:05:16.153 に答える