The more ambiguous ones are session_decode and session_encode:
bool session_decode(string data);
session_decode() decodes the session data in data, setting variables
stored in the session.
bool session_encode(void);
session_encode() returns a string with the contents of the current
sessionencoded within. There seems to be no relevant examples in the
php manual. From the literal meaning, decode is to parse the user string
and set it into the session, while encode is to "package" the session data and return it to the user
. It seems that the role of encode may be greater. After the user registers the data into the session
, he should use encode to get the data out, but the things returned by encode still need to be processed.
For example:
session_register( "val1");
$val1 = "abcde"
session_register("val2");
$val1 = 1234
session_register("val3");
$val1 = 123.45
Then what session_encode returns is:
val1:s:5:"abcde";val2:i:1234;val3:d:123.45;
Obviously,'s ' is a string, 'i' and 'd' are numbers, and variables of type 's' require length.
If your session id is aaeebbcfd4455ec2c0d5cb590f8fab74, then this string of things
actually exists in the /tmp/aaeebbcfd4455ec2c0d5cb590f8fab74 file.
Now you need to process this string of things yourself and extract the session data you want. It’s strange that php4
doesn’t provide a convenient interface to parse registered variables... Or maybe I can’t find it.
Write one yourself first...
session_data_init takes out all the "packaged" session_data
session_data_get gets the data according to the variable name
Use:
$data = session_data_init( );
$ result = session_data_get($data, "val1");
The data of val1 can be taken out.
/*
* get all date registered in the session
*/
function session_data_init( ) {
$sessionData = session_encode();
return $sessionData;
}
?>
/*
* extract one variable from enconded session data
*/
function session_data_get($data, $name) {
$matchStr = $name."|";
$matchStart = strpos($data, $matchStr);
if ($matchStart == 0) {
if (strlen($data) < strlen($matchStr)) return "";
$tmpStr = substr($data, 0, strlen($matchStr));
if (strcmp($tmpStr, $matchStr) != 0) return "";
}
$typeStart = $matchStart + strlen($matchStr);
$dataType = substr($data, $typeStart, 1);
if (strcmp($dataType, "s") == 0) { /* string */
$lenStart = $typeStart + 2;
$lenEnd = strpos($data, ":", $lenStart) - 1;
$lenLen = $lenEnd - $lenStart + 1;
$strLen = substr($data, $lenStart, $lenLen);
$strStart = $lenEnd + 3;
$strResult = substr($data, $strStart, $strLen);
return $strResult;
} else if (strcmp($dataType, "i") == 0 ||
strcmp($dataType, "d") == 0) { /* number */
$numStart = $typeStart + 2;
$numEnd = strpos($data, ";", $numStart) - 1;
$numLen = numEnd - numStart + 1;
$numResult = substr($data, $numStart, $numLen);
return $numResult;
} else {
return "";
}
}
?>