在Wordpress中未检测到Cookie

时间:2012-06-25 21:52:53

标签: php wordpress mobile detect

我正在使用this page中的技术设置简单的移动/桌面重定向。我还在移动网站上设置了一个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的一个问题,并且停止重定向到移动网站,就像它应该的那样。

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

3 个答案:

答案 0 :(得分:1)

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

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

然后,在页面的后面,你可以这样做:

if ( $detect->isMobile() && $cookievalue == "m" ) {
      $detect = "false";
}
else if ( $detect->isMobile() ) {
     header("Location:http://m.example.com");
}

答案 1 :(得分:1)

您的代码看起来很好 - 除非您在Mobile_Detect中遇到任何问题,但我无法看到如何考虑Cookie,正如您所说,正在设置。

我猜你可能会在移动浏览器上看到一个问题,或者可能是隐私设置。不要只是设置一个标准的cookie,而是尝试使用一个Session - 无论如何,这几乎可以帮助你完成所有的cookie。

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

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

你真的不需要在那段代码上运行检测 - 如果cookie /会话数组尚未被接收,它将不会持有“移动”索引。

所以而不是;

<?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通常是一种很好的做法,我认为这有助于解决可能出现的任何浏览器安全问题。

给它一个镜头,让我知道它是否适合你。

祝你好运,

  • 锐衡

答案 2 :(得分:0)

问题解决了!

运行Drupal的桌面站点就是问题所在。这是一个缓存问题,因为如果我运行cron,整个检测方案都可以正常工作。第二次,它没有。它只能在运行cron后运行一次。我将不得不让我们的常驻Drupal专业人员弄明白。

感谢所有的帮助!