我正在使用this page中的技术设置简单的移动/桌面重定向。我还在移动网站上设置了一个Cookie,以便在用户想要链接回桌面网站时,将会读取该Cookie并且重定向将不。我正在处理Wordpress网站,当重定向 工作时,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的一个问题,并且停止重定向到移动网站,就像它应该的那样。
几个小时后,我需要一些帮助!
答案 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专业人员弄明白。
感谢所有的帮助!