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 相关文章推荐
桌面中心(四)数据显示
Oct 09 PHP
PHP $_FILES函数详解
Mar 09 PHP
php一个找二层目录的小东东
Aug 02 PHP
php mssql扩展SQL查询中文字段名解决方法
Oct 15 PHP
wamp下修改mysql访问密码的解决方法
May 07 PHP
深入解析php之apc
May 15 PHP
PHP生成验证码时“图像因其本身有错无法显示”的解决方法
Aug 07 PHP
yii实现CheckBox复选框在同一行显示的方法
Dec 03 PHP
Twig模板引擎用法入门教程
Jan 20 PHP
Symfony2学习笔记之系统路由详解
Mar 17 PHP
PHP弱类型的安全问题详细总结
Sep 25 PHP
基于CI(CodeIgniter)框架实现购物车功能的方法
Apr 09 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后台程序与Javascript的两种交互方式
2009/10/25 PHP
PHP编程风格规范分享
2014/01/15 PHP
PHP 无限级分类
2017/05/04 PHP
PHP基于redis计数器类定义与用法示例
2018/02/08 PHP
php7 参数、整形及字符串处理机制修改实例分析
2020/05/25 PHP
JavaScript中判断函数是new还是()调用的区别说明
2011/04/07 Javascript
js 文本滚动效果的实例代码
2013/08/17 Javascript
innerHTML在IE中报错解决方案
2014/12/15 Javascript
Vue学习笔记进阶篇之多元素及多组件过渡
2017/07/19 Javascript
vue.js绑定事件监听器示例【基于v-on事件绑定】
2018/07/07 Javascript
对vue中v-on绑定自定事件的实例讲解
2018/09/06 Javascript
浅谈vue权限管理实现及流程
2020/04/23 Javascript
Python3基础之条件与循环控制实例解析
2014/08/13 Python
Python 使用requests模块发送GET和POST请求的实现代码
2016/09/21 Python
利用Python读取txt文档的方法讲解
2018/06/23 Python
对python的bytes类型数据split分割切片方法
2018/12/04 Python
Python字典常见操作实例小结【定义、添加、删除、遍历】
2019/10/25 Python
Python基础之列表常见操作经典实例详解
2020/02/26 Python
pycharm 激活码及使用方式的详细教程
2020/05/12 Python
在python中list作函数形参,防止被实参修改的实现方法
2020/06/05 Python
世界上最大的街头服饰网站:Karmaloop
2017/02/04 全球购物
电子狗项圈:eDog Australia
2019/12/04 全球购物
Clos19英国:高档香槟、葡萄酒和烈酒在线购物平台
2020/07/10 全球购物
System.Array.CopyTo()和System.Array.Clone()有什么区别
2016/06/20 面试题
linux面试题参考答案(9)
2016/01/29 面试题
《蓝色的树叶》教学反思
2014/02/24 职场文书
2015年乡镇妇联工作总结
2015/05/19 职场文书
2015年乡镇纪委工作总结
2015/05/26 职场文书
工作感言一句话
2015/08/01 职场文书
学习弘扬焦裕禄精神心得体会
2016/01/23 职场文书
作文之亲情600字
2019/09/23 职场文书
90行Python代码开发个人云盘应用
2021/04/20 Python
Redis IP地址的绑定的实现
2021/05/08 Redis
nginx结合openssl实现https的方法
2021/07/25 Servers
开发者首先否认《遗弃》被取消的传言
2022/04/11 其他游戏
解决 redis 无法远程连接
2022/05/15 Redis