在预控制器codeigniter挂钩中访问CI会话

时间:2011-12-29 22:19:39

标签: php codeigniter session internationalization multilingual

我正在使用预控制器挂钩来检测和设置会话/ cookie /浏览器lang检测中的站点语言..类似这样的回答: Codeigniter language

我还使用着名的Tank Auth库来管理用户,我在登录时使用codeigniter Session类来存储和管理用户会话。每个用户都可以指定他想要的界面语言并将其存储在数据库中未来登录。在每次登录时,lang信息都会从数据库复制到会话。

问题是:我无法从钩子内部检查用户会话。我如何知道(如果是登录用户)他的会话是否有lang信息?

我不确定在处理登录用户会话时钩子方法是否是最好的方法。如果我能有更好的方法,请告诉我。

提前致谢

3 个答案:

答案 0 :(得分:3)

我通过使用 post_controller_constructor 挂钩代替 pre_controller 解决了这个问题。在那个钩子中,会话是可访问的。所以我在CI会话中设置检测到的语言,并且我正在相应地加载语言文件。

我不确定这是否是最好的方法,但如果你没有在任何控制器构造函数中使用lang库,它可以正常工作。

答案 1 :(得分:2)

使用post_controller_constructor hock。它在控制器构造函数之后和控制器方法之前调用。它应该为你做的伎俩。对我来说它确实

答案 2 :(得分:-1)

一种可能的解决方案是尝试从预控制器挂钩中加载CI实例中的会话库。

$CI = &get_instance();   
$CI->load->library('session');
// --- Then ---
$var = $CI->session->userdata('$the_variable_youre_checking');