PHP cookie问题,不包括语言文件

时间:2013-12-19 22:02:05

标签: php

如果会话中没有cookie,我有一段代码可以重定向用户。

if (isset($_GET['lang'])) {
    if (in_array($_GET['lang'], $jezici)) {
        $lang = $_GET['lang'];
        // register the session and set the cookie
        $_SESSION['lang'] = $lang;
        setcookie("lang", $lang, time() + (3600 * 24 * 30));
    } else {
        $lang = 'hr';
        $_SESSION['lang'] = $lang;
        setcookie("lang", $lang, time() + (3600 * 24 * 30));
    }
} else if (isset($_SESSION['lang'])) {
    $lang = $_SESSION['lang'];
} else if (isset($_COOKIE['lang'])) {
    $lang = $_COOKIE['lang'];
} else if (empty($_GET['lang']) || !isset($_GET['lang'])) {
    $trenutni_file = basename($_SERVER['PHP_SELF']);
    ?>
    <META http-equiv="refresh" content="0;URL=http://<?php echo $domena; ?>/<?php echo       $trenutni_file; ?>?lang=hr">
    <?php
    exit();
}
?>

这是我在index.php中包含它的方式

$langArray = include 'lang/'.$lang.'.php';

但有时我得到这个错误未能包含lang / .php ...这段代码显然没有做好一切..如果会话中没有设置cookie,我会将用户重定向到index.php?lang=hr ...有什么帮助吗?

1 个答案:

答案 0 :(得分:1)

您的上一个条件(empty($_GET['lang']) || !isset($_GET['lang']))本身就是多余的,因为empty已经检查了该函数是否已设置,因为您可以阅读here。此外,它与第一个条件是多余的。

此外,您缺少确定在会话或cookie中是否设置var的情况,它实际上不是空的(例如,它可以设置为空字符串)

我会更改所有isset来电empty来电,并添加最终的独立条件,如果设置了$ lang,无论如何,以及是否有有效值

if (!empty($_GET['lang'])) {
    if (in_array($_GET['lang'], $jezici)) {
        $lang = $_GET['lang'];
        // register the session and set the cookie
        $_SESSION['lang'] = $lang;
        setcookie("lang", $lang, time() + (3600 * 24 * 30));
    } else {
        $lang = 'hr';
        $_SESSION['lang'] = $lang;
        setcookie("lang", $lang, time() + (3600 * 24 * 30));
    }
} else if (!empty($_SESSION['lang'])) {
    $lang = $_SESSION['lang'];
} else if (!empty($_COOKIE['lang'])) {
    $lang = $_COOKIE['lang'];
}


if (empty($lang) ||  (!in_array($_GET['lang'], $jezici)))  {
        $trenutni_file = basename($_SERVER['PHP_SELF']);
        ?>
        <META http-equiv="refresh" content="0;URL=http://<?php echo $domena; ?>/<?php echo       $trenutni_file; ?>?lang=hr">
        <?php
        exit();
    }