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+AJAX实现无刷新注册(带用户名实时检测)
Jan 02 PHP
开发大型 PHP 项目的方法
Jan 02 PHP
用php将任何格式视频转为flv的代码
Sep 03 PHP
php数据入库前清理 注意php intval与mysql的int取值范围不同
Dec 12 PHP
PHP utf-8编码问题,utf8编码,数据库乱码,页面显示输出乱码
Apr 08 PHP
PHP使用DOMDocument类生成HTML实例(包含常见标签元素)
Jun 25 PHP
深入理解PHP中的global
Aug 19 PHP
php简单备份与还原MySql的方法
May 09 PHP
PHP数组操作简单案例分析
Oct 15 PHP
PHP使用GD库制作验证码的方法(点击验证码或看不清会刷新验证码)
Aug 15 PHP
深入理解PHP的远程多会话调试
Sep 21 PHP
CentOS7系统搭建LAMP及更新PHP版本操作详解
Mar 26 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
数字转英文
2006/12/06 PHP
PHP配置文件中最常用四个ini函数
2007/03/19 PHP
用PHP写的基于Memcache的Queue实现代码
2011/11/27 PHP
php中serialize序列化与json性能测试的示例分析
2013/04/27 PHP
php获取URL中带#号等特殊符号参数的解决方法
2014/09/02 PHP
几行代码轻松搞定jquery实现flash8类似的连接效果
2007/05/03 Javascript
jQuery实现密保互斥问题解决方案
2013/08/16 Javascript
使用JQuery库提供的扩展功能实现自定义方法
2014/09/09 Javascript
详解JavaScript的while循环的使用
2015/06/03 Javascript
angularjs学习笔记之三大模块(modal,controller,view)
2015/09/26 Javascript
Bootstrap三种表单布局的使用方法
2016/06/21 Javascript
JavaScript实现DOM对象选择器
2016/09/24 Javascript
node.js连接mysql与基本用法示例
2019/01/05 Javascript
vue如何截取字符串
2019/05/06 Javascript
微信小程序获取公众号文章列表及显示文章的示例代码
2020/03/10 Javascript
JS中FileReader类实现文件上传及时预览功能
2020/03/27 Javascript
javascript 函数的暂停和恢复实例详解
2020/04/25 Javascript
vue 动态添加class,三个以上的条件做判断方式
2020/11/02 Javascript
解决nuxt页面中mounted、created、watch执行两遍的问题
2020/11/05 Javascript
Python时间戳与时间字符串互相转换实例代码
2013/11/28 Python
Django中模版的子目录与include标签的使用方法
2015/07/16 Python
通过实例浅析Python对比C语言的编程思想差异
2015/08/30 Python
Python selenium文件上传方法汇总
2020/11/19 Python
python实现微信接口(itchat)详细介绍
2017/10/23 Python
破解安装Pycharm的方法
2018/10/19 Python
python 一个figure上显示多个图像的实例
2019/07/08 Python
浅谈Python 敏感词过滤的实现
2019/08/15 Python
python并发编程多进程 模拟抢票实现过程
2019/08/20 Python
Python解释器及PyCharm工具安装过程
2020/02/26 Python
Django media static外部访问Django中的图片设置教程
2020/04/07 Python
基于Python 的语音重采样函数解析
2020/07/06 Python
selenium+python自动化78-autoit参数化与批量上传功能的实现
2021/03/04 Python
自行车广告词大全
2014/03/21 职场文书
大专应届毕业生求职信
2014/07/15 职场文书
2015年档案管理员工作总结
2015/05/13 职场文书
2016年“11.11”光棍节活动总结
2016/04/05 职场文书