当前位置: 首页 > 图文教程 > 网络编程 > PHP > php4的session功能评述(二)

PHP
工作笔记:配置MySQL为高可用集群 (1)
MySQL (C API)VC实例及代码下载 (1)(5)
MySQL (C API)VC实例及代码下载 (1)(4)
MySQL (C API)VC实例及代码下载 (1)(3)
MySQL (C API)VC实例及代码下载 (1)(2)
MySQL (C API)VC实例及代码下载 (1)
用JSP连接mysql数据库的方法 (1)(2)
用JSP连接mysql数据库的方法 (1)
MySQL数据库账户授权的相关管理解析 (1)(2)
MySQL数据库账户授权的相关管理解析 (1)
SAP MaxDB MySQL修补数据库严重漏洞
MySQL研发中心成立发布会会后访问整理 (1)(2)
MySQL研发中心成立发布会会后访问整理 (1)
MySQL中SQL-TEXT、DATE和SET数据类型
MySQL存在权限提升及安全限制绕过漏洞
MySQL 卸载的问题
windows下安装、卸载mysql服务
如何正确卸载MySQL
MySQL手册版本 5.0.20-MySQL优化(四) (1)(5)
MySQL手册版本 5.0.20-MySQL优化(四) (1)(4)

PHP 中的 php4的session功能评述(二)


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-13   浏览: 205 ::
收藏到网摘: n/a

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