Codeigniter多语言/会话没有正确引用

时间:2016-05-01 18:18:27

标签: php codeigniter session cookies

我在CodeIgniter环境中再次提出了一个问题。当我使用会话来确定页面的语言时,如果我在一段时间后重新进入页面,我会收到错误。这些是会话的设置。

$config['sess_cookie_name'] = 'ci_session';
$config['sess_expiration'] = 7200;
$config['sess_expire_on_close'] = FALSE;
$config['sess_encrypt_cookie'] = FALSE;
$config['sess_use_database'] = FALSE;
$config['sess_table_name'] = 'ci_sessions';
$config['sess_match_ip'] = FALSE;
$config['sess_match_useragent'] = TRUE;
$config['sess_time_to_update'] = 300;

问题恰恰是会话处理之间的区别。 langauges在整个页面上变得混杂。如果我使用此代码:

{% if (session_get('language_id')==1) %}
            {{home_page_content.box_one_title_in_english}}
          {% elseif (session_get('language_id')==2) %}
            {{home_page_content.box_one_title_in_french}}
          {% elseif (session_get('language_id')==3) %}
            {{home_page_content.box_one_title_in_german}}
          {% elseif (session_get('language_id')==4) %}
            {{home_page_content.box_one_title_in_spanish}}
          {% else %}
            {{home_page_content.box_one_title_in_english}}
          {% endif  %}

我得到英语因为没有会话。但同时语言文件到达了这个字符串:

{{language_key('example')}}

语言设置为我在页面上之前设置的语言。所以我的英语文本和德语链接。我认为这是与cookie中保存的会话的一些问题有关,因为我清除我的浏览器我得到整个页面的英语,然后我能够设置将保留一段时间的语言。但即使我设置会话到期,问题仍然存在,并且id能够为用户提供设置其个人语言的体验。我希望我的问题是可以理解的:)这里有一些可能有用的代码:

$autoload['libraries'] = array('dbal', 'session', 'auth', 'twig','email','form_validation','database');

和功能

function set_language($language_id)
{   
    $query="SELECT * FROM languages WHERE id = ? "; 
    $languages_array = $this->db->fetchAssoc($query,array($language_id));
    if(!empty($languages_array)){
        setcookie('language_cookie', $languages_array['language'], time() + (86400 * 30), "/");
        setcookie('language_id_cookie', $language_id, time() + (86400 * 30), "/");
        $this->session->remove('language_id');
        $this->session->set('language_id',$language_id);
    }       
    else {
        $this->session->set('language_id',$language_id);
    }
}
谢谢你的时间!问候

1 个答案:

答案 0 :(得分:0)

可以通过这个指示实现问题的解决方案:

Replace cookie helper set_cookie() with an improved version

由于cssBlaster21895的评论,我能够正确地解决问题,所以我可以发现它发送了多个Set-Cookie标头。谢谢你的帮助!