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源代码
Oct 09 PHP
在 PHP 中使用随机数的三个步骤
Oct 09 PHP
PHP面向对象分析设计的61条军规小结
Jul 17 PHP
php Notice: Undefined index 错误提示解决方法
Aug 29 PHP
PHP图片处理类 phpThumb参数用法介绍
Mar 11 PHP
thinkphp中连接oracle时封装方法无法用的解决办法
Jun 17 PHP
关于svn冲突的解决方法
Jun 21 PHP
php恢复数组的key为数字序列的方法
Apr 28 PHP
用PHP生成excel文件到指定目录
Jun 22 PHP
PHP关联数组实现根据元素值删除元素的方法
Jun 26 PHP
简单谈谈php浮点数精确运算
Mar 10 PHP
php合并数组并保留键值的实现方法
Mar 12 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易混淆知识整理笔记
2015/09/24 PHP
php利用smtp类实现电子邮件发送
2015/10/30 PHP
PHP实现mysqli批量执行多条语句的方法示例
2017/07/22 PHP
面向对象Javascript核心支持代码分享
2012/05/23 Javascript
jquery中的on方法使用介绍
2013/12/29 Javascript
javascript将相对路径转绝对路径示例
2014/03/14 Javascript
js实现拖拽效果
2015/02/12 Javascript
js实现表单多按钮提交action的处理方法
2015/10/24 Javascript
使用jQuery制作浮动工具栏的实例分享
2016/05/13 Javascript
jquery之别踩白块游戏的简单实现
2016/07/25 Javascript
Angular2 (RC4) 路由与导航详解
2016/09/21 Javascript
js判断价格,必须为数字且不能为负数的实现方法
2016/10/07 Javascript
Bootstrap Table使用整理(三)
2017/06/09 Javascript
详解webpack3编译兼容IE8的正确姿势
2017/12/21 Javascript
three.js 入门案例详解
2018/01/23 Javascript
js 递归json树实现根据子id查父id的方法分析
2019/11/08 Javascript
JavaScript实现字符串与HTML格式相互转换
2020/03/17 Javascript
浅谈vue项目利用Hbuilder打包成APP流程,以及遇到的坑
2020/09/12 Javascript
Python3写入文件常用方法实例分析
2015/05/22 Python
Python实现字典的key和values的交换
2015/08/04 Python
Windows下Python使用Pandas模块操作Excel文件的教程
2016/05/31 Python
Python numpy 点数组去重的实例
2018/04/18 Python
TensorFlow数据输入的方法示例
2018/06/19 Python
基于Python在MacOS上安装robotframework-ride
2018/12/28 Python
双向RNN:bidirectional_dynamic_rnn()函数的使用详解
2020/01/20 Python
Python单元测试及unittest框架用法实例解析
2020/07/09 Python
Python 随机按键模拟2小时
2020/12/30 Python
CSS3 实现倒计时效果
2020/11/25 HTML / CSS
Hush Puppies澳大利亚官网:舒适的男女休闲和正装鞋
2019/08/24 全球购物
德语专业求职信
2014/03/12 职场文书
反对形式主义、官僚主义、享乐主义和奢靡之风整改措施
2014/09/17 职场文书
群众路线教育实践活动对照检查材料思想汇报(副处级领导)
2014/10/04 职场文书
个人存款证明书
2014/10/18 职场文书
2014年仓管员工作总结
2014/11/18 职场文书
个人事迹材料范文
2014/12/29 职场文书
Spring实现内置监听器
2021/07/09 Java/Android