Codeigniter-PHP-在存储之前和返回时对会话用户数据进行编码和解码
我想在Codeigniter中扩展Session.php库 我想使用Codeigniter-PHP-在存储之前和返回时对会话用户数据进行编码和解码,php,codeigniter,session,decode,encode,Php,Codeigniter,Session,Decode,Encode,我想在Codeigniter中扩展Session.php库 我想使用base64编码/解码会话值 所以基本上我想在之前对所有会话数据进行全局编码 它被设置(session->set_userdata()),然后在被设置时对其进行解码 返回(会话->用户数据('item')) 可能吗 我有麻烦了,我该如何在设置会话数据的时刻和返回数据的时刻触发 我正在使用Codeigniter会话数据库并计划编写我的_session.php库,但无法继续,我在这里被阻止: class MY_Session ext
base64编码/解码会话值
所以基本上我想在之前对所有会话数据进行全局编码
它被设置(session->set_userdata()),然后在被设置时对其进行解码
返回(会话->用户数据('item'))
可能吗
我有麻烦了,我该如何在设置会话数据的时刻和返回数据的时刻触发
我正在使用Codeigniter会话数据库并计划编写我的_session.php库,但无法继续,我在这里被阻止:
class MY_Session extends CI_Session{
}
感谢您的帮助,您需要覆盖会话库的
session->set_userdata()
和session->userdata()
实现
您的新函数将可公开调用,而不是会话类中的函数,通过调用
父类::
您可以访问Codeigniter库中的函数。您只需重写写入/读取数据的适当方法即可将编码包含在内。我想知道为什么您需要编码,因为这会给进程增加一些开销。@MikeBrant因为我需要支持内部的多字节字符串,而默认的lib会崩溃:(你也能帮我处理flashdata吗?这样我就可以接受你的答案了,我必须理解其中的逻辑,并试着自己去做。要有创意!@bradbadbedbread我编辑了答案,以包含一个更全面的set_userdata()实现。)
这样它就可以接受数组和参数的键值对。Flashdata支持实际上与userdata实现完全相同,只需使用相同的逻辑重写Flashdata函数并更改函数名即可。@BadWolf但是…$array没有设置!?无法理解为什么要使用for()而不是foreach()?@bradbadbedbread那是我的错,我的错。我只是编辑了它来修正它。
class MY_Session extends CI_Session{
public function set_userdata($data, $singleVar = NULL) {
if(is_array($data)) {
foreach($data as $key => &$value) {
//Encode $value
}
parent::set_userdata($array);
}
else {
//Encode $singleVar
parent::set_userdata($data, $singleVar);
}
}
public function userdata($item) {
$data = parent::userdata($item);
//Decode $data
return $data;
}
}