1

我正在使用此页面中的技术设置一个简单的移动/桌面重定向。我还在移动网站上设置了一个 cookie,这样如果用户想要链接回桌面网站,就会读取该 cookie,并且不会发生重定向。我正在处理 Wordpress 网站,虽然重定向确实有效,但 cookie无法正常工作。这是正在发生的事情:

  • 移动重定向确实有效
  • cookie设置成功(用WP外的测试页面确认)
  • 当用户点击回到桌面站点时,cookie不会被看到,并且用户会再次转储回移动站点。

我使用 2 个外部静态页面测试了我的代码,一切正常 100%。只是当我在 Wordpress 中使用相同的确切代码时不会。这是我在每个站点上的 header.php 文件中的代码:

桌面网站

<?php
    include('Mobile_Detect.php');
    $detect = new Mobile_Detect();
    if ( $detect->isMobile() && isset($_COOKIE["mobile"]) ) {
         $detect = "false";
    }
    else if ( $detect->isMobile() ) {
         header("Location:http://m.example.com");
    }
?>

移动网站

<?php setcookie('mobile','m', time()+3600, '/','.example.com'); ?>

PHP 代码是文件中的第一部分,在任何 HTML 之前,并且之前或之后没有错误的空格。我已经通过回显一些文本来测试这段代码,并且脚本那里并且做它应该做的事情。这只是没有看到 cookie 并停止重定向到移动站点的问题之一。

几个小时后,我需要一些帮助!

4

3 回答 3

1

如果您在同一页面上设置 cookie,请将 cookie 值分配给变量。IE:

$cookievalue = "m";
setcookie("mobile",$cookievalue);

然后,在页面后面,您可以执行以下操作:

if ( $detect->isMobile() && $cookievalue == "m" ) {
      $detect = "false";
}
else if ( $detect->isMobile() ) {
     header("Location:http://m.example.com");
}
于 2012-06-25T22:06:28.757 回答
1

您的代码看起来不错 - 除非您的 Mobile_Detect 有任何问题,但我看不出您是如何考虑设置 cookie 的。

我会冒险猜测您可能正在查看移动浏览器的问题,或者可能是隐私设置。不要仅仅设置一个标准的cookie,而是尝试使用一个会话——无论如何,这几乎可以为你完成所有的cookie工作。

只需使用(在代码的最开始,没有 html 等,就像使用标准 cookie 一样);

Session_start();
if ( isset($_SESSION["mobile"]) ) {

您真的不需要对那段代码运行检测 - 如果 cookie/session 数组还没有被拾取,它就不会持有“移动”索引。

所以代替;

<?php setcookie('mobile','m', time()+3600, '/','.example.com'); ?>

利用;

<?php
Session_start();
$_SESSION['mobile'] = (bool) true;
$_SESSION['m'] = (bool) true;
$_SESSION['time'] = (int) time()+3600;

等等等等..(请记住 Session_start(); 需要位于将使用此 cookie 的每个页面的开头!)

通过浏览器会话绑定 cookie 通常是一种好习惯,我想这将有助于解决可能出现的任何浏览器安全问题。

试一试,让我知道它是否适合你。

祝你好运,

  • 伊根
于 2012-06-25T22:06:38.127 回答
0

问题解决了!

运行 Drupal 的桌面站点是问题所在。这是一个缓存问题之类的,因为如果我运行 cron,整个检测方案就可以完美运行。第二次,它没有。它只在运行 cron 后立即工作一次。我将不得不让我们的常驻 Drupal 专业人士来解决这个问题。

不过,感谢所有帮助!

于 2012-06-26T14:12:26.830 回答