我的移动侦测脚本有问题。 有两种情况: 首先,脚本应该检测它是否是移动设备。如果是移动,而不是重定向到另一个页面(这很好)。
第二个查询应该确定该人是否在根页面上。如果它不是根页面,则布局应该是经典的。 (没有重定向) 但是,当我添加此行时,即使我在移动设备上打开根页,也不会再有重定向。
我还尝试在google_mobile.php(重定向页面)上销毁会话并设置$ _SESSION ['layoutType'] ='mobile',但无论如何,当我打开根页面时会话设置为经典。< / p>
感谢您的帮助!
这是脚本:
session_start();
require_once 'Mobile_Detect.php';
function layoutTypes() {
return array('classic', 'mobile');
}
function initLayoutType() {
// Safety check.
if (!class_exists('Mobile_Detect'))
return 'classic';
$detect = new Mobile_Detect;
$isMobile = $detect->isMobile();
$layoutTypes = layoutTypes();
// Set the layout type.
if (isset($_GET['layoutType'])) {
$layoutType = $_GET['layoutType'];
} else {
if (empty($_SESSION['layoutType'])) {
$layoutType = ($isMobile ? 'mobile' : 'classic');
} else {
$layoutType = $_SESSION['layoutType'];
}
//check if it's the root page
if ($_SERVER['REQUEST_URI'] != "/")
$layoutType = 'classic';
}
// Fallback. If everything fails choose classic layout.
if (!in_array($layoutType, $layoutTypes))
$layoutType = 'classic';
// Store the layout type for future use.
$_SESSION['layoutType'] = $layoutType;
return $layoutType;
}
$layoutType = initLayoutType();
if ($_SESSION['layoutType'] == 'mobile') {
header("Location: www.example.com/google_mobile.php");
exit;
}
答案 0 :(得分:0)
我已经测试了你的代码,它似乎像你描述的那样工作。我猜这是会议问题。
session_destroy()
不会在即时会话中清除您之前的会话状态。这意味着即使$_SESSION
是其中的第一行,您的session_destroy()
在脚本中仍然会“脏”。从浏览器清除cookie更安全。
另一个可能的问题是查询字符串。您正在检查REQUEST_URI
,它包含URI上的任何查询字符串。 “/?foo = bar”肯定不是“/”。您可能需要检查SCRIPT_NAME
(即$_SERVER['SCRIPT_NAME'] == 'index.php
)。