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 相关文章推荐
shopex主机报错误请求解决方案(No such file or directory)
Dec 27 PHP
php 解决旧系统 查出所有数据分页的类
Aug 27 PHP
PHP读取数据库并按照中文名称进行排序实现代码
Jan 29 PHP
浅析PHP substr,mb_substr以及mb_strcut的区别和用法
Jun 21 PHP
PHP中的str_repeat函数在JavaScript中的实现
Sep 16 PHP
Chrome Web App开发小结
Sep 04 PHP
微信公众平台网页授权获取用户基本信息中授权回调域名设置的变动
Oct 21 PHP
PHP中大于2038年时间戳的问题处理方案
Mar 03 PHP
PHP调用.NET的WebService 简单实例
Mar 27 PHP
PHP中生成UUID自定义函数分享
Jun 10 PHP
Codeigniter控制器controller继承问题实例分析
Jan 19 PHP
详解json在php中的应用
Sep 30 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
Dedecms V3.1 生成HTML速度的优化办法
2007/03/18 PHP
PHP关于IE下的iframe跨域导致session丢失问题解决方法
2013/10/10 PHP
用php简单实现加减乘除计算器
2014/01/06 PHP
php获取文件内容最后一行示例
2014/01/09 PHP
thinkphp3.0输出重复两次的解决方法
2014/12/19 PHP
PHP实现根据银行卡号判断银行
2015/04/29 PHP
php ajax实现文件上传进度条
2016/03/29 PHP
PHP获取远程http或ftp文件的md5值的方法
2019/04/15 PHP
jQuery之按钮组件的深入解析
2013/06/19 Javascript
js中this用法实例详解
2015/05/05 Javascript
jquery实现鼠标滑过显示二级下拉菜单效果
2015/08/24 Javascript
浅析jQuery移动开发中内联按钮和分组按钮的编写
2015/12/04 Javascript
javascript 判断是否是微信浏览器的方法
2016/10/09 Javascript
vue中动态添加class类名的方法
2018/09/05 Javascript
微信小程序云开发 搭建一个管理小程序
2019/05/17 Javascript
Vue中computed及watch区别实例解析
2020/08/01 Javascript
js实现右键弹出自定义菜单
2020/09/08 Javascript
微信小程序实现页面监听自定义组件的触发事件
2020/11/01 Javascript
[12:29]2018国际邀请赛 开幕秀
2018/08/22 DOTA
python实现调用其他python脚本的方法
2014/10/05 Python
Python工程师面试题 与Python Web相关
2016/01/14 Python
Python实现变量数值交换及判断数组是否含有某个元素的方法
2017/09/18 Python
Python从函数参数类型引出元组实例分析
2019/05/28 Python
Python一行代码解决矩阵旋转的问题
2019/11/30 Python
基于python 凸包问题的解决
2020/04/16 Python
Python Sqlalchemy如何实现select for update
2020/10/12 Python
美国宠物美容和宠物用品购物网站:Cherrybrook
2018/12/07 全球购物
Java平台和其他软件平台有什么不同
2015/06/05 面试题
自动化系在校本科生求职信
2013/10/23 职场文书
会计出纳员的自我评价
2014/01/15 职场文书
2014离婚协议书范文
2014/09/10 职场文书
单位租房协议范本
2014/12/03 职场文书
护士实习自荐信
2015/03/06 职场文书
2015年纪检监察工作总结
2015/04/08 职场文书
2015年学校禁毒工作总结
2015/05/27 职场文书
关于拾金不昧的感谢信(五篇)
2019/10/18 职场文书