持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第19天
10月更文诚意加码,激发写作潜力|掘金·日新计划 - 掘金 (juejin.cn)点击查看活动详情
序列化和反序列化就像base的解密和加密一样
序列化是解密
反序列化是加密
所有php里面的值都是可以使用函数serialize()来放回一个包含字节流的字符串表示。unserialize()函数能够重新把字符串变回php原来的值。序列化一个对象将会保存对象的所有变量,但不会保存对象的方法,只会保存类的名字。
先看一下序列化是怎么样的
实例:
最后使用了serialize()函数对a对象进行了序列化,如果代码最后一句是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');";}
因为我这个代码写的就是打开计算器,传正确了就会打开