【问题标题】:Force "visit full site" link to show full site all the time强制“访问完整站点”链接始终显示完整站点
【发布时间】:2013-09-24 20:46:52
【问题描述】:

这是我的代码。有人遇到了 PHP 重定向的问题,所以我只是通过一个 JS 并注释掉另一个。

因此,当我使用手机 (WP8) 时,如果我打开了“首选移动网站”,即使使用下面的代码,我也会卡在移动网站“m.smsalem.com”上。但是,如果我将其更改为“首选桌面站点”,我会先获得移动站点,可以单击“访问完整站点”,然后才能查看常规站点。

知道我还能做些什么来强制设置了“首选移动网站”的人在点击该链接时访问常规网站?

<?php
include 'http://smsalem.com/Mobile_Detect.php';
$detect = new Mobile_Detect();

if(strpos($_SERVER['HTTP_REFERER'], 'm.smsalem.com')){
    setcookie("noMobile", true, time()+86400);  /* expire in 1 hour */
}

if ($detect->isMobile()) {
    if(!isset($_COOKIE['noMobile'])){
        ?>
        <script type="text/javascript">
            if (screen.width <= 700) {
            window.location = "http://m.smsalem.com";
        }
    </script>
    <?php
        //header('Location: m.smsalem.com');
        //exit(0);
      }
} ?>

【问题讨论】:

  • 你不能在输出已经发送后调用header()(我们可以看到)
  • 这不是问题。如果没有 JS,header() 对我来说工作得很好,但对我的同事来说不行。我认为他们没有 dl 文件的新版本。同样,问题是“无论重定向‘方法’如何,当点击‘查看完整站点’链接时,如何强制移动用户留在标准站点上”?我希望移动网站的人将查询字符串添加到完整站点链接,但使用起来很麻烦。
  • 您在setcookie() 中设置的cookie 在您的服务器上点击NEXT 之前将无法在$_COOKIE 中使用。超全局变量在脚本启动时设置和填充,然后在脚本执行期间不再被 PHP 触及。

标签: javascript php redirect mobile


【解决方案1】:

就像 Marc B 已经提到的那样,您设置的 cookie 在您进行刷新之前不可用。如果您只设置一小时的 cookie,那么为什么不使用直接可用的SESSION

您的代码将如下所示:

<?php
include 'http://smsalem.com/Mobile_Detect.php';
$detect = new Mobile_Detect();

if(strpos($_SERVER['HTTP_REFERER'], 'm.smsalem.com')){
    $_SESSION["noMobile"] = true;
}

if ($detect->isMobile()) {
    if(!isset($_SESSION["noMobile"])){
        ?>
        <script type="text/javascript">
            if (screen.width <= 700) {
            window.location = "http://m.smsalem.com";
        }
    </script>
    <?php
        //header('Location: m.smsalem.com');
        //exit(0);
      }
} ?>

我个人会使用 PHP header() 来重定向用户。但是,您将无法在重定向之前检查屏幕宽度。

【讨论】:

    猜你喜欢
    • 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
    相关资源
    最近更新 更多