欢迎来到福编程网,本站提供各种互联网专业知识!

php4的session功能评述(二)

发布时间:2006-10-09 作者: 来源:转载
比较模糊的是session_decode和session_encode:boolsession_decode(stringdata);session_decode()decodesthesessiondataindata,settingvariablesstoredinthesession.boolsession_encode(void);session_encode()returnsastringwiththecontentsofthecurrentsess
比较模糊的是session_decode和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.

php manual里面好象没有相关的例子。从字面意思来看decode是把用户的串

解析出来以后set到session里面,encode则是把session的数据“打包”返回

给用户。这样看来encode的作用可能更大一些,用户register数据到session

里面以后应该是用encode把数据取出来的,但是encode返回的东西仍需要处理,

比如:

session_register("val1");

$val1 = "abcde"

session_register("val2");

$val1 = 1234

session_register("val3");

$val1 = 123.45

那么session_encode返回的东西是:

val1:s:5:"abcde";val2:i:1234;val3:d:123.45;

很明显,'s'是string,'i'和'd'是数字,'s'类型的变量需要长度。

如果你的session id是aaeebbcfd4455ec2c0d5cb590f8fab74,那么这串东西实际

上是存在/tmp/aaeebbcfd4455ec2c0d5cb590f8fab74文件当中。

现在需要你自己把这串东西做处理,析出你想要的session data。很奇怪php4

没提供一个方便的接口实现已register变量的解析... 或者有我没找着。

先自己写一个了...

session_data_init取出所有“打包”的session_data

session_data_get根据变量名取得数据

用:

$data = session_data_init( );

$result = session_data_get($data, "val1");

就可以把val1的数据取出来。

/*

* 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 "";

}

}

?>

相关推荐