【问题标题】:Codeigniter Multilanguage / Sessions not refering properlyCodeigniter 多语言/会话未正确引用
【发布时间】:2016-05-01 18:18:26
【问题描述】:

我在 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;

问题正是会话处理之间的区别。整个页面上的语言混杂在一起。如果我使用此代码:

{% 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 中的会话的一些问题,因为我清除了浏览器,我得到了整个英文页面,然后我可以设置将保留一段时间的语言。但即使我设置了会话到期,问题仍然存在,并且我希望能够为用户提供设置其个人语言的体验。我希望我的问题是可以理解的 :) 这里还有一些可能有用的代码:

$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);
    }
}

感谢您的宝贵时间!问候

【问题讨论】:

  • 尝试隔离问题。从仅将语言 ID 放在会话中开始,看看会发生什么。请注意,如果您使用基本会话库设置,则使用 cookie - 看起来,您使用了两次 cookie。
  • 嘿,我如何将语言 ID 仅放在会话中,我不太明白您的意思。所以你说我不需要在语言功能中设置cookie?
  • 我认为它的重复,语言切换的简单示例在用户指南中 - codeigniter.com/user_guide/libraries/…

标签: php codeigniter session cookies


【解决方案1】:

通过这条指令可以解决问题:

Replace cookie helper set_cookie() with an improved version

由于 cssBlaster21895 的评论,我能够正确解决问题,因此我可以弄清楚它发送了多个 Set-Cookie 标头。感谢您的帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-26
    • 2012-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-20
    相关资源
    最近更新 更多