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仿ZOL分页类代码
Oct 02 PHP
php获取淘宝分类id示例
Jan 16 PHP
二进制交叉权限微型php类分享
Feb 07 PHP
支持中文和其他编码的php截取字符串函数分享(截取中文字符串)
Mar 13 PHP
PHP生成自定义长度随机字符串的函数分享
May 04 PHP
兼容PHP和Java的des加密解密代码分享
Jun 26 PHP
PHP学习笔记(二) 了解PHP的基本语法以及目录结构
Aug 04 PHP
php array_merge函数使用需要注意的一个问题
Mar 30 PHP
php自定义函数实现JS的escape的方法示例
Jul 07 PHP
PHP实现redis限制单ip、单用户的访问次数功能示例
Jun 16 PHP
PHP预定义接口――Iterator用法示例
Jun 05 PHP
CI框架简单分页类用法示例
Jun 06 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
全国FM电台频率大全 - 12 安徽省
2020/03/11 无线电
DOTA2 6.87版本后新眼位详解攻略
2020/04/20 DOTA
php生成随机数的三种方法
2014/09/10 PHP
php隐藏IP地址后两位显示为星号的方法
2014/11/21 PHP
php+mysqli使用面向对象方式查询数据库实例
2015/01/29 PHP
php+ajax注册实时验证功能
2016/07/20 PHP
javascript 定义新对象方法
2010/02/20 Javascript
初试jQuery EasyUI 使用介绍
2010/04/01 Javascript
JavaScript取得鼠标绝对位置程序代码介绍
2012/09/16 Javascript
使用按钮控制以何种方式打开新窗口的属性介绍
2012/12/17 Javascript
jQuery中的height innerHeight outerHeight区别示例介绍
2014/06/15 Javascript
jquery实现在网页指定区域显示自定义右键菜单效果
2015/08/25 Javascript
vuejs指令详解
2017/02/07 Javascript
Javascript中的神器——Promise
2017/02/08 Javascript
js轮播图透明度切换(带上下页和底部圆点切换)
2017/04/27 Javascript
详解 vue.js用法和特性
2017/10/15 Javascript
vue中如何创建多个ueditor实例教程
2017/11/14 Javascript
Angular数据绑定机制原理
2018/04/17 Javascript
深入理解JavaScript和TypeScript中的class
2018/04/22 Javascript
微信小程序与公众号实现数据互通的方法
2019/07/25 Javascript
JS控制GIF图片的停止与显示
2019/10/24 Javascript
Python语言描述随机梯度下降法
2018/01/04 Python
Django 中使用流响应处理视频的方法
2018/07/20 Python
python使用tkinter库实现五子棋游戏
2019/06/18 Python
Django项目中使用JWT的实现代码
2019/11/04 Python
python GUI库图形界面开发之PyQt5单行文本框控件QLineEdit详细使用方法与实例
2020/02/27 Python
基于Python生成个性二维码过程详解
2020/03/05 Python
使用Python封装excel操作指南
2021/01/29 Python
Myprotein芬兰官网:欧洲第一运动营养品牌
2019/05/05 全球购物
Java的类可以定义为Protected或者Private得吗
2015/09/25 面试题
自荐信格式写作方法有哪些呢
2013/11/20 职场文书
个人简历中的自我评价怎么写
2014/01/26 职场文书
庆六一活动总结
2014/08/29 职场文书
幼师小班个人总结
2015/02/12 职场文书
2016年村干部公开承诺书(公开承诺事项)
2016/03/25 职场文书
JavaScript选择器函数querySelector和querySelectorAll
2021/11/27 Javascript