php4的session功能评述(二)

比较模糊的是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 “”; } } ?

发表评论

电子邮件地址不会被公开。 必填项已用*标注