【问题标题】:View full site with cookies, javascript and mobile redirect查看带有 cookie、javascript 和移动重定向的完整网站
【发布时间】:2013-07-24 17:58:14
【问题描述】:

我有一个网站 (www.website.com) 和一个移动网站 (m.website.com),如果用户想从移动设备上“查看完整网站”,我会尝试让他们“查看完整网站”。目前我正在使用一些 Javascript 来检查整个站点上的屏幕宽度,然后重定向到移动设备。

if (screen.width <= 699) {
document.location = "http://m.website.com";
}

这很好用。在移动网站上有一个“查看完整网站”按钮。当您单击它时,它会将您重定向到我的脚本“force_desktop.php”,该脚本会设置一个 cookie,然后将您发送到主站点。

<?php
setcookie("force_desktop", "1");
header("Location: http://www.mywebsite.com");
?>

现在我们设置了一个 cookie 并重定向到主网站,我们需要检查 cookie 而不是只检查屏幕宽度。

逻辑

如果找到 Cookie force_desktop

然后退出

其他

运行屏幕尺寸测试

这是我尝试使用但不起作用的代码。此代码放置在我的 head.php 文件中,该文件将在每个页面上运行,并放置在脚本开始和结束标记之间。

尝试 1

if($_COOKIE['force_desktop'] == '1' {
exit;
} else if($_COOKIE['force_desktop'] != '1' {
if (screen.width <= 699) {
document.location = "http://m.website.com";
}
};

尝试 2

if(isset ($_COOKIE["force_desktop"])){
exit;
else
if (screen.width <= 699) {
document.location = "http://m.mywebsite.com";
};

可行的替代逻辑

如果 Cookie force_desktop 未找到且 screen.width

然后重定向到 m.myseite.com

其他

退出

注意

我已经运行了以下脚本来确保放置了一个 cookie,并且确实是。

<?php
print_r($_COOKIE);
?>

我的想法已经用完了,并且知道我的编码不正确,尤其是 If/Else 语句中的 If/Else 语句。我也不确定是否最好使用“isset”来查看是否正在使用 cookie 或 ($_COOKIES['variable'] == "#")。我非常感谢您对此提供一些好的反馈。

提前感谢您的帮助和建议,

马特

【问题讨论】:

    标签: php javascript redirect


    【解决方案1】:

    您正在混合使用 JavaScript 和 PHP。您试图在 PHP 脚本中使用 screen.width,这没有意义。您需要使用 echo 语句将 JavaScript 输出到页面中。然后它会检查用户的屏幕分辨率并进行重定向。

    试试这个:

    if(isset ($_COOKIE["force_desktop"])){
        exit;
    }
    else
    {
        echo '<script> 
        if (screen.width <= 699) {
        document.location = "http://m.mywebsite.com";}
        </script>'; 
    };
    

    【讨论】:

    • 感谢 Amal 的快速回复。我理解这个答案背后的逻辑,如果它没有找到“force_desktop”cookie,它会将测试屏幕宽度的脚本写入(回显)到 html 中。但是,我不确定将其放置在代码中的哪个位置。我把它放在我的“head.php”文件中,并按原样放在php标签中,在脚本标签中,甚至将它保存到单独的php文件中,并使用php包含来查看它是否有效。我只是不知道如何正确实现这一点。希望您能多帮助这个新手,再次感谢 Amal。
    • @Matt:只需将脚本添加到整个站点代码的顶部,它就可以工作了。
    • 感谢 Amal 为我指明了正确的方向。在结束脚本标记之前需要一个“}”来运行 screen.width 调用,这就是给我带来这么多麻烦的原因。我还在 else 之前添加了一个“}”标签,在 else 之后添加了一个“{”。再次感谢,标记为正确答案。
    【解决方案2】:

    你应该在php页面的顶部做这个测试,并且肯定你不能像这样混合php和java脚本

    你可以像这样修改这段代码

    <?php
     $flag = 0;
     if(isset($_COOKIE['force_desktop']))$flag++;
    ?>
    

    &lt;head&gt; 标签开始后在页面后面使用代码

    ..
    ..
    <head>
    <?php
    if(!$flag){
    echo '<script> 
    if (screen.width <= 699) {
    document.location = "http://m.mywebsite.com";
    </script>'; 
     }
    ?>
    

    【讨论】:

      【解决方案3】:

      你不能混合使用 javascript 和 PHP,javascript 是前端,PHP 是后端。试试这样的:

      if( $something ){
      
         Header("Location: somewhere.php");
      
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-08-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多