PHP移动检测

时间:2014-06-13 09:06:00

标签: php session mobile

我的移动侦测脚本有问题。 有两种情况: 首先,脚本应该检测它是否是移动设备。如果是移动,而不是重定向到另一个页面(这很好)。

第二个查询应该确定该人是否在根页面上。如果它不是根页面,则布局应该是经典的。 (没有重定向) 但是,当我添加此行时,即使我在移动设备上打开根页,也不会再有重定向。

我还尝试在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;
}

1 个答案:

答案 0 :(得分:0)

我已经测试了你的代码,它似乎像你描述的那样工作。我猜这是会议问题。

session_destroy()不会在即时会话中清除您之前的会话状态。这意味着即使$_SESSION是其中的第一行,您的session_destroy()在脚本中仍然会“脏”。从浏览器清除cookie更安全。

另一个可能的问题是查询字符串。您正在检查REQUEST_URI,它包含URI上的任何查询字符串。 “/?foo = bar”肯定不是“/”。您可能需要检查SCRIPT_NAME(即$_SERVER['SCRIPT_NAME'] == 'index.php)。