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 相关文章推荐
配置支持SSI
Nov 25 PHP
PHP面向对象学习笔记之一 基础概念
Oct 06 PHP
深入密码加salt原理的分析
Jun 06 PHP
php对数组排序的简单实例
Dec 25 PHP
php实现批量下载百度云盘文件例子分享
Apr 10 PHP
CentOS下PHP安装Oracle扩展
Feb 15 PHP
PHP常用处理静态操作类
Apr 03 PHP
PHP用反撇号执行外部命令
Apr 14 PHP
PHP实现通过正则表达式替换回调的内容标签
Jun 15 PHP
PHP中Closure类的使用方法及详解
Oct 09 PHP
php用户密码加密算法分析【Discuz加密算法】
Oct 12 PHP
PHP框架实现WebSocket在线聊天通讯系统
Nov 21 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 session 预定义数组
2009/03/16 PHP
PHP 数组教程 定义数组
2009/10/23 PHP
php设计模式 Chain Of Responsibility (职责链模式)
2011/06/26 PHP
如何通过Linux命令行使用和运行PHP脚本
2015/07/29 PHP
PHP使用socket发送HTTP请求的方法
2016/02/14 PHP
Smarty变量用法详解
2016/05/11 PHP
PHP空值检测函数与方法汇总
2017/11/19 PHP
Laravel框架实现利用中间件进行操作日志记录功能
2018/06/06 PHP
Javascript中的window.event.keyCode使用介绍
2011/04/26 Javascript
使用Jquery搭建最佳用户体验的登录页面之记住密码自动登录功能(含后台代码)
2011/07/10 Javascript
基于jQuery的公告无限循环滚动实现代码
2012/05/11 Javascript
D3.js 从P元素的创建开始(显示可加载数据)
2014/10/30 Javascript
js钢琴按钮波浪式图片排列效果代码分享
2015/08/26 Javascript
js实现选中页面文字将其分享到新浪微博
2015/11/05 Javascript
javascript事件冒泡简单示例
2016/06/20 Javascript
JS实现获取图片大小和预览的方法完整实例【兼容IE和其它浏览器】
2017/04/24 Javascript
express+vue+mongodb+session 实现注册登录功能
2018/12/06 Javascript
Vue自定义属性实例分析
2019/02/23 Javascript
实现一个 Vue 吸顶锚点组件方法
2019/07/10 Javascript
JS检索下拉列表框中被选项目的索引号(selectedIndex)
2019/12/17 Javascript
js实现查询商品案例
2020/07/22 Javascript
[02:28]DOTA2英雄基础教程 狼人
2013/12/23 DOTA
python代码实现ID3决策树算法
2017/12/20 Python
Python 字符串与数字输出方法
2018/07/16 Python
Python获取时间范围内日期列表和周列表的函数
2019/08/05 Python
使用python实现unix2dos和dos2unix命令的例子
2019/08/13 Python
python对象转字典的两种实现方式示例
2019/11/07 Python
Django项目uwsgi+Nginx保姆级部署教程实现
2020/04/19 Python
Python根据字符串调用函数过程解析
2020/11/05 Python
一些常用的HTML5模式(pattern) 总结
2015/07/14 HTML / CSS
房地产销售大学生自我评价分享
2013/11/11 职场文书
初婚未育证明
2014/01/15 职场文书
《恐龙》教学反思
2014/04/27 职场文书
交通事故和解协议书
2015/01/27 职场文书
硕士学位申请报告
2015/05/15 职场文书
如何使用pdb进行Python调试
2021/06/30 Python