检查cookie和会话值

时间:2013-02-05 23:23:54

标签: php model-view-controller multilingual gettext

我正在使用多语言网站,现在我遇到了问题。当$ _GET [' setlang']为空时,语言设置为en_US,即使我之前打开了setlang = pl(这很正常 - 语言正在改变)

empty($_GET['setlang']) ? $_GET['setlang'] = '' : $_GET['setlang'];
    switch ($_GET['setlang']) {
        case 'en':
            $lang = 'en_US';
            putenv('LC_ALL='.$lang);
            setlocale(LC_ALL, $lang.'.UTF8');
            setcookie('lang', $lang, time()+60*60*24*365);
            $_SESSION['lang'] = $lang;
            $_config['lang'] = $lang;
            break;

        case 'pl':
            $lang = 'pl_PL';
            putenv('LC_ALL='.$lang);
            setlocale(LC_ALL, $lang.'.UTF8');
            setcookie('lang', $lang, time()+60*60*24*365);
            $_SESSION['lang'] = $lang;
            $_config['lang'] = $lang;
            break;

        default:
            if((isset($_SESSION['lang']) && $_SESSION['lang'] ='en_US') || (isset($_COOKIE['lang']) && $_COOKIE['lang'] = 'en_US')){
                $lang = 'en_US';
                putenv('LC_ALL='.$lang);
                setlocale(LC_ALL, $lang.'.UTF8');
             }

            else{
                $lang = 'pl_PL';
                putenv('LC_ALL='.$lang);
                setlocale(LC_ALL, $lang.'.UTF8');
             }

            $_config['lang'] = $lang;
            break;
    }

    $my_name = 'default';

    bindtextdomain($my_name,'./locale');
    textdomain($my_name);

运行后我无法使用此脚本将语言更改为pl_PL?setlang = pl action。当此get为空时,cookie值将更改为en_US; /

我该如何检查并避免此问题?

我也在与MVC合作。这段代码看起来是对的还是我应该将一些代码放入模型而不是控制器?

3 个答案:

答案 0 :(得分:1)

if((isset($_SESSION['lang']) && $_SESSION['lang'] =='en_US') || (isset($_COOKIE['lang']) && $_COOKIE['lang'] == 'en_US'))

==而不是=进行比较,这样您就可以'en_US'$_SESSION["lang"]分配$_COOKIE["lang"]

答案 1 :(得分:0)

你开始会议了吗?如果没有,则无法设置或查询会话变量。

使用session_start();

答案 2 :(得分:0)

$lang = "";

// Check if lang cookie is set
if(isset($_COOKIE['lang']))
{
    $lang = $_COOKIE['lang'];
}
// Cookie is not set
else
{
// Get language GET variable
    $set_lang = (empty($_GET['setlang'])) ? '' : $_GET['setlang'];

    switch($set_lang)
    {
        case 'en':
            $lang = "en_US";
        break;

        case 'pl':
            $lang = "pl_PL";
        break;

        default:
            $lang = "en_US";
        break;
    }

    // Set language cookie
    setcookie('lang', $lang, time()+60*60*24*365);
}

// Set locale
putenv('LC_ALL=' . $lang);
setlocale(LC_ALL, $lang . ".UTF8");