【发布时间】: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