php序列化与反序列化,序列化是啥?

50 阅读1分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第19天
10月更文诚意加码,激发写作潜力|掘金·日新计划 - 掘金 (juejin.cn)点击查看活动详情

 序列化和反序列化就像base的解密和加密一样

序列化是解密

反序列化是加密

所有php里面的值都是可以使用函数serialize()来放回一个包含字节流的字符串表示。unserialize()函数能够重新把字符串变回php原来的值。序列化一个对象将会保存对象的所有变量,但不会保存对象的方法,只会保存类的名字。

先看一下序列化是怎么样的

实例:

最后使用了serialize()函数对a对象进行了序列化,如果代码最后一句是echo a;,就将echoa;,就将echo a; 改成echo serialize($a);

这个就如同密码,用来解开反序列化

这样就是序列化,输出得到一大长串字符:

O:4:"User":1:{s:3:"cmd";s:15:"system('calc');";}

对象类型:长度:“名字”:类中变量的个数:{类型:长度:"名字";类型:长度:"值";……}

序列化格式中的字母含义:

a - array                  b - boolean 

d - double                 i - integer

o - common object          r - reference

s - string                 C - custom object

O - class                  N - null

R - pointer reference      U - unicode string

反序列化实例:

看最后一句,unserialize()函数能够重新把字符串变回php原来的值,($_GET['date'])

也就是将序列化得出的字符串使用get的方法data传上去

在网址http://192.168.7.68:9999/2.php输入?O:4:"User":1:{s:3:"cmd";s:15:"system('calc');";}

因为我这个代码写的就是打开计算器,传正确了就会打开