Codeigniter 如何保存用户语言

Codeigniter 如何保存用户语言,codeigniter,session,session-timeout,Codeigniter,Session,Session Timeout,我将用户语言选择保存到会话中,如下所示: $this->session->set_userdata('language', $language); 然后根据会话数据设置语言(并将英语作为默认语言) 它工作得很好,但用户选择的语言仅持续约2小时-然后用户必须再次选择该语言。所以问题是,如何延长会话时间以使其过期(或者仅在用户清理浏览器数据时使其过期)。我无法将用户选择保存在数据库中,因为我还需要处理网站上的访客 我知道我可以在CI的配置中延长会话时间,但我只希望它只在选择语言的情况下

我将用户语言选择保存到会话中,如下所示:

$this->session->set_userdata('language', $language);
然后根据会话数据设置语言(并将英语作为默认语言)

它工作得很好,但用户选择的语言仅持续约2小时-然后用户必须再次选择该语言。所以问题是,如何延长会话时间以使其过期(或者仅在用户清理浏览器数据时使其过期)。我无法将用户选择保存在数据库中,因为我还需要处理网站上的访客


我知道我可以在CI的配置中延长会话时间,但我只希望它只在选择语言的情况下发生,而不是在帐户会话的情况下发生。

这是同一个会话,它要么过期,要么不过期。您不能让身份验证部分过期,但不能让语言选择过期。CI不便于管理多个会话,这使得在一个短期会话中存储身份验证和在一个长期会话中存储语言首选项成为可能。事实上,直接将语言偏好存储在cookie中可能更容易;请记住,您必须在每次请求时重新设置cookie,否则它不会在用户活动时自动刷新,即使用户正在积极使用该站点,它也会过期。

我也在考虑cookie,但不确定它是否适合此用途。现在看来这是唯一的方法了。你也可以自己实现整个第二个会话,但对我来说,这似乎是一种过火的行为。饼干很适合这个用途。
if ( !$language = $CI->session->userdata('language') )
{
    $language = "english";
}

$CI->config->set_item('language', $language);