社区
基础编程
帖子详情
如何将会话内容反序列化成数组
countstars
2006-02-24 10:53:08
比如会话内容
d|i:0;u|i:1;
如何将其转为数组
$session = array("d"=>0,"u"=>1);
非常感谢。
...全文
163
4
打赏
收藏
如何将会话内容反序列化成数组
比如会话内容 d|i:0;u|i:1; 如何将其转为数组 $session = array("d"=>0,"u"=>1); 非常感谢。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
4 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
countstars
2006-02-26
打赏
举报
回复
上了两个define,补上
define('SESSION_DELIMITER', '|');
define('SESSION_UNDEF_MARKER', '!');
countstars
2006-02-26
打赏
举报
回复
我要从数据库里取会话来分析,所以上面的都不切实际
以下是Justin(http://www.phpsalon.com/)帮我写的程序片段:
function my_session_decode($str) {
$str_len = strlen($str);
$p = 0;
$ret = array();
while ($p < $str_len) {
$q = $p;
while ($str[$q] != SESSION_DELIMITER) {
if (++$q > $str_len) break 2;
}
if ($str[$p] == SESSION_UNDEF_MARKER) {
$p++;
$has_value = false;
} else {
$has_value = true;
}
$key_len = $q - $p;
$key = substr($str, $p, $key_len);
$q++;
if ($has_value) {
$type = substr($str, $q, 1);
$value = @unserialize(substr($str, $q, $str_len));
if ($value !== FALSE) {
switch ($type) {
case 'i':
// integer
$q += strlen(strval($value)) + 3;
break;
case 's':
// string
$q += strlen(strval(strlen($value))) + 6 + strlen($value);
break;
case 'a':
// array
break;
case 'b':
// boolean
break;
case 'o':
// object
break;
case 'r':
// resource
break;
case 'd':
// double
break;
}
$ret[$key] = $value;
}
} else {
$ret[$key] = '';
}
$p = $q;
}
return $ret;
}
xuzuning
2006-02-24
打赏
举报
回复
还是这样比较稳妥
print_r(foo('d|i:0;u|i:1;'));
function foo($s) {
if(! isset($_SESSION)) {
@session_start();
}
$t = $_SESSION;
session_decode($s);
list($t, $_SESSION) = array($_SESSION, $t);
return $t;
}
xuzuning
2006-02-24
打赏
举报
回复
$ar = explode(';', 'd|i:0;u|i:1;');
foreach($ar as $v) {
if($v) {
list($k, $v) = explode('|', $v.';');
$p[$k] = unserialize($v);
}
}
print_r($p);
这只是测试例,当值中出现“;”就有问题了
session包含和session
反序列化
基本总结!
大家都知道我们访问网站时,使用的协议是http(https),但是HTTP 是一种无状态协议,也就是说,每次请求都是独立的,服务器不会记得上一次请求的信息。你会发现这里的键名我们是可控的,在前面的表单上传那里我就把PHP_SESSION_UPLOAD_PROGRESS的value里面注入了一个php的代码,这也就是为什么上传了还可以看到phpinfo的原因!同目录下的test.php文件(这里为什么强调是同一目录下,因为同一浏览器的同一目录下的所有网页共享同一session,也就意味着可以干"坏事")
php
反序列化
学习(3)
当session_start()被调用或者php.ini中session.auto_start为1时,php内部调用
会话
管理器,访问用户session被序列化后,存储到指定目录(默认为/tmp)。:写入格式与读取格式不一致。
PHP
反序列化
6(session
反序列化
)
考点6:session
反序列化
PHP
反序列化
漏洞
序列化与
反序列化
在维基百科中是这样定义的: 序列化是(serialization)在计算机科学的数据处理中,是指将数据结构或对象状态转换为可取用格式(例如存
成
文件,存于缓存,或经由网络中发送),以留待后续在相同或另一台计算机环境中,能恢复原先状态的过程。 概念其实很容易理解,就是将数据转换为一种可逆的存储格式,正向存储为序列化,反向存储就为
反序列化
。 按照王sir的理解,设想这样一种场景:在双十...
PHP
反序列化
漏洞
本篇笔记
内容
包括漏洞
成
因、Session
反序列化
、phar
反序列化
、字符逃逸等相关知识。
基础编程
21,889
社区成员
140,337
社区内容
发帖
与我相关
我的任务
基础编程
从PHP安装配置,PHP入门,PHP基础到PHP应用
复制链接
扫一扫
分享
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章