Codeignter Session decode 和 encode 的底层实现方式

阅读 (2441)
这里指的是不用session_encode 和 session_decode; 直接操作任意session值,decode 那段,来自于 http://php.net/session_decode,序列化那段因为codeignter session不太一样,需自已拼接

举个栗子

<?php
$session_data = '__ci_last_regenerate|i:1476420432;uid|s:1:"1";username|s:5:"admin";';
echo $session_data;

// decode
$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));
}
// decode 结果
// print_r($return_data);


// endcode
$serialize_data = '';
foreach ($return_data as $key => $value) {
	$serialize_data .= $key.'|'.serialize($value);
}
// encode 结果
echo ($serialize_data);

if($session_data == $serialize_data){
	echo '序列化结果跟原字符串相同';
}else{
	echo '不相同';
}




 

 

 

更新于:2016-10-13 17:59:26
返回顶部