$ar = explode(';', 'd|i:0;u|i:1;');foreach($ar as $v) {
if($v) {
list($k, $v) = explode('|', $v.';');
$p[$k] = unserialize($v);
}
}
print_r($p);这只是测试例,当值中出现“;”就有问题了
if($v) {
list($k, $v) = explode('|', $v.';');
$p[$k] = unserialize($v);
}
}
print_r($p);这只是测试例,当值中出现“;”就有问题了
if(! isset($_SESSION)) {
@session_start();
}
$t = $_SESSION;
session_decode($s);
list($t, $_SESSION) = array($_SESSION, $t);
return $t;
}
以下是Justin(http://www.phpsalon.com/)帮我写的程序片段:
function my_session_decode($str) {
$str_len = strlen($str);
$p = 0;
$ret = array();
while ($p < $str_len) {
$q = $p;
while ($str[$q] != SESSION_DELIMITER) {
if (++$q > $str_len) break 2;
} if ($str[$p] == SESSION_UNDEF_MARKER) {
$p++;
$has_value = false;
} else {
$has_value = true;
}
$key_len = $q - $p;
$key = substr($str, $p, $key_len);
$q++;
if ($has_value) {
$type = substr($str, $q, 1);
$value = @unserialize(substr($str, $q, $str_len));
if ($value !== FALSE) {
switch ($type) {
case 'i':
// integer
$q += strlen(strval($value)) + 3;
break;
case 's':
// string
$q += strlen(strval(strlen($value))) + 6 + strlen($value);
break;
case 'a':
// array
break;
case 'b':
// boolean
break;
case 'o':
// object
break;
case 'r':
// resource
break;
case 'd':
// double
break;
}
$ret[$key] = $value;
}
} else {
$ret[$key] = '';
}
$p = $q;
}
return $ret;
}
define('SESSION_DELIMITER', '|');
define('SESSION_UNDEF_MARKER', '!');