session存储在数据库中的数据如何读取出来?
我现在设置session存储在ci_sessions表中,然后通过session_id查询数据库,其中data字段存的是session内容,现在的问题是data字段存的是字符串,我应该如何才能把这个字符串转成数组来使用?你并不需要做任何操作, CI已经帮你做好了,不论是数组还是普通字符串,该序列化的已被序列化, 你只用CI的方法就好。 yuzhigang5460 发表于 2015-8-20 11:43
你并不需要做任何操作, CI已经帮你做好了,不论是数组还是普通字符串,该序列化的已被序列化, 你只用CI的 ...
因为我需要读这个session表的程序已经不在ci框架里面了,所以不能使用ci类来读session值了,可以理解为跨域了
取决于怎么序列化的, 尝试:
json_decode($your_string, true); //第二参数设为true则反序列化为数组, 反之为对象。
或者:
unserialize($your_string); 本帖最后由 amu 于 2015-8-20 11:57 编辑
yuzhigang5460 发表于 2015-8-20 11:48
取决于怎么序列化的, 尝试:
json_decode($your_string, true); //第二参数设为true则反序列化为数组, 反 ...
原session数组
Array( => 1440042706
=> kiss
=> 9527
=> 男
=> Array ( => 123456 => 123456@qq.com )
=> 99
)
数据库存储的字符串
__ci_last_regenerate|i:1440042706;usr_name|s:4:"kiss";usr_id|s:4:"9527";usr_sex|s:3:"男";info|a:2:{s:2:"qq";s:6:"123456";s:4:"mail";s:13:"123456@qq.com";}count|i:99;
我不知道这是用什么方法转的
哦,找到了,用的是 session_encode/session_decode,但这个session_decode会把结果直接丢给$_SESSION 在php.net官方手册的评论中有人发了一段解码程序
function unserialize_php($session_data) {
$return_data = array();
$offset = 0;
while ($offset < strlen($session_data)) {
if (!strstr(substr($session_data, $offset), "|")) {
throw new Exception("invalid data, remaining: " . substr($session_data, $offset));
}
$pos = strpos($session_data, "|", $offset);
$num = $pos - $offset;
$varname = substr($session_data, $offset, $num);
$offset += $num + 1;
$data = unserialize(substr($session_data, $offset));
$return_data[$varname] = $data;
$offset += strlen(serialize($data));
}
return $return_data;
}
页:
[1]