php4的session功能评述(二)


Posted in PHP onOctober 09, 2006

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

PHP 相关文章推荐
解析php中反射的应用
Jun 18 PHP
curl不使用文件存取cookie php使用curl获取cookie示例
Jan 26 PHP
php数组查找函数总结
Nov 18 PHP
php快速查找数据库中恶意代码的方法
Apr 01 PHP
PHP生成plist数据的方法
Jun 16 PHP
php判断两个日期之间相差多少个月份的方法
Jun 18 PHP
php防止用户重复提交表单
Nov 02 PHP
thinkPHP实现的联动菜单功能详解
May 05 PHP
PHP PDO数据库操作预处理与注意事项
Mar 16 PHP
php实现分页功能的详细实例方法
Sep 29 PHP
Laravel 自定命令以及生成文件的例子
Oct 23 PHP
详解Laravel框架的依赖注入功能
May 27 PHP
动态新闻发布的实现及其技巧
Oct 09 #PHP
最简单的PHP程序--记数器
Oct 09 #PHP
用PHP产生动态的影像图
Oct 09 #PHP
在Windows版的PHP中使用ADO
Oct 09 #PHP
PHP4与PHP3中一个不兼容问题的解决方法
Oct 09 #PHP
PHP 高手之路(一)
Oct 09 #PHP
PHP 高手之路(二)
Oct 09 #PHP
You might like
通俗易懂的php防注入代码
2010/04/07 PHP
ThinkPHP处理Ajax返回的方法
2014/11/22 PHP
php购物车实现方法
2015/01/03 PHP
php操作memcache缓存方法分享
2015/06/03 PHP
PHP实现事件机制实例分析
2015/06/26 PHP
解决windows上php xdebug 无法调试的问题
2020/02/19 PHP
tp5.1 框架join方法用法实例分析
2020/05/26 PHP
js实现的网站首页随机公告随机公告
2007/03/14 Javascript
javascript Xml增删改查(IE下)操作实现代码
2009/01/30 Javascript
js模拟类继承小例子
2010/07/17 Javascript
JS定时刷新页面及跳转页面的方法
2013/07/04 Javascript
js中的异常处理try...catch使用介绍
2013/09/21 Javascript
jQuery focus和blur事件的应用详解
2014/01/26 Javascript
Vue+Webpack完美整合富文本编辑器TinyMce的方法
2018/11/30 Javascript
jquery拖拽自动排序插件使用方法详解
2020/07/20 jQuery
JavaScript中的回调函数实例讲解
2019/01/27 Javascript
最简单的vue消息提示全局组件的方法
2019/06/16 Javascript
JS 数组和对象的深拷贝操作示例
2020/06/06 Javascript
python list语法学习(带例子)
2013/11/01 Python
解决python写的windows服务不能启动的问题
2014/04/15 Python
对Python 检查文件名是否规范的实例详解
2019/06/10 Python
python 子类调用父类的构造函数实例
2020/03/12 Python
全网最全python库selenium自动化使用详细教程
2021/01/12 Python
AmazeUI导航的示例代码
2020/08/14 HTML / CSS
米兰网婚纱礼服法国网上商店:Milanoo法国
2016/08/20 全球购物
德国柯吉澳趣味家居:Koziol
2017/08/24 全球购物
Hertz荷兰:荷兰和全球租车
2018/01/07 全球购物
俄罗斯隐形眼镜和眼镜在线商店:Cronos
2020/06/02 全球购物
Java面试中常遇到的问题,也是需要注意的几点
2013/08/30 面试题
会计专业自我鉴定范文
2013/12/29 职场文书
优秀员工表扬信
2014/01/17 职场文书
行政助理的岗位职责
2014/02/18 职场文书
水毁工程实施方案
2014/04/01 职场文书
学校先进集体事迹材料
2014/05/31 职场文书
七一党日活动总结
2014/07/08 职场文书
《雷雨》教学反思
2016/02/20 职场文书