0

0

PHP变量序列化有什么用_PHP变量序列化用途【操作】

蓮花仙者

蓮花仙者

发布时间:2026-02-24 21:30:10

|

208人浏览过

|

来源于php中文网

原创

php序列化用于持久化变量状态以跨请求复用,如登录态、缓存;含对象、私有属性、引用等时必须用serialize()而非json_encode();unserialize()有rce风险,严禁反序列化用户输入,需白名单控制且注意php版本兼容性。

php变量序列化有什么用_php变量序列化用途【操作】

PHP序列化是用来跨时间/跨空间保存变量状态的

它不是为了“存起来好看”,而是解决一个具体问题:PHP脚本执行完就销毁所有变量,但你想让某个数组或对象下次还能用——比如用户登录态、缓存数据、队列任务参数。这时候就得把它变成字符串存到文件、数据库或Redis里。serialize()干的就是这事:把内存里的结构打成一串可存储、可传输的字节流。

什么时候必须用serialize()而不是json_encode()

当你的变量含以下内容时,json_encode()会直接失败或丢数据,只能选serialize()

  • 对象(尤其带私有/受保护属性、或实现了__sleep()的)
  • 资源类型(如fopen()返回的句柄——不过这类通常不该序列化)
  • 包含闭包的数组(PHP 7.4+ 仍不支持序列化闭包,但serialize()至少报错明确)
  • 需要保留类名、属性可见性、内部引用关系的场景(比如两个数组元素指向同一个对象)

反过来说,如果只是传API数据、前端交互、或存纯数组/标量,json_encode()更安全、可读、跨语言。

unserialize()的安全风险比你想象中高得多

它不只是“还原变量”,而是会触发对象的__wakeup()、甚至在反序列化过程中执行任意代码——只要类定义里有危险逻辑。2019年ThinkPHP RCE漏洞就是典型例子。

Perl 基础教程 chm
Perl 基础教程 chm

Perl 基础入门中文教程,chm格式,讲述PERL概述、简单变量、操作符、列表和数组变量、文件读写、模式匹配、控制结构、子程序、关联数组/哈希表、格式化输出、文件系统、引用、面向对象、包和模块等知识点。适合初学者阅读和了解Perl脚本语言。

下载

立即学习PHP免费学习笔记(深入)”;

  • 永远别对用户输入(如cookie、GET参数)直接调用unserialize()
  • PHP 7.4+ 可用unserialize($data, ['allowed_classes' => false])禁用对象反序列化
  • 若必须支持特定类,显式列出白名单:['allowed_classes' => ['MyCacheItem', 'UserData']]
  • Redis或Memcached里存serialize()结果时,确保连接不被中间人劫持——因为篡改后的序列化字符串可能触发漏洞

性能和兼容性:别在PHP版本升级后忽略序列化格式变化

PHP 7.4 对对象序列化做了细微调整(比如属性顺序、空数组表示),导致7.4序列化的字符串在7.3上unserialize()可能失败或行为异常。

  • 生产环境严禁混用不同主版本PHP做序列化/反序列化(如7.2写入,8.1读取)
  • 跨服务通信(如PHP写、Python读)坚决别用serialize(),改用JSON或Protocol Buffers
  • 存数据库时,字段类型建议用TEXT而非VARCHAR(255)——序列化后字符串长度不可控,尤其含中文或大数组时
  • igbinary扩展能提升性能并减小体积,但会牺牲可读性和调试便利性,只在明确压测瓶颈后引入

序列化本身很简单,难的是想清楚“谁写、谁读、隔多久、换不换环境”。很多线上故障不是函数不会用,是忘了序列化字符串本质是一段带执行语义的二进制快照。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

448

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

544

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

323

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

81

2025.09.10

thinkphp和laravel哪个简单
thinkphp和laravel哪个简单

对于初学者来说,laravel 的入门门槛较低,更易上手,原因包括:1. 更简单的安装和配置;2. 丰富的文档和社区支持;3. 简洁易懂的语法和 api;4. 平缓的学习曲线。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

382

2024.04.10

thinkphp性能怎么样
thinkphp性能怎么样

thinkphp 是一款高性能的 php 框架,具备缓存机制、代码优化、并行处理和数据库优化等优势。官方性能测试显示,它每秒可处理超过 10,000 个请求,实际应用中被广泛用于京东商城、携程网等大型网站和企业系统。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

355

2024.04.10

cookie
cookie

Cookie 是一种在用户计算机上存储小型文本文件的技术,用于在用户与网站进行交互时收集和存储有关用户的信息。当用户访问一个网站时,网站会将一个包含特定信息的 Cookie 文件发送到用户的浏览器,浏览器会将该 Cookie 存储在用户的计算机上。之后,当用户再次访问该网站时,浏览器会向服务器发送 Cookie,服务器可以根据 Cookie 中的信息来识别用户、跟踪用户行为等。

6480

2023.06.30

document.cookie获取不到怎么解决
document.cookie获取不到怎么解决

document.cookie获取不到的解决办法:1、浏览器的隐私设置;2、Same-origin policy;3、HTTPOnly Cookie;4、JavaScript代码错误;5、Cookie不存在或过期等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

365

2023.11.23

Golang 生态工具与框架:扩展开发能力
Golang 生态工具与框架:扩展开发能力

《Golang 生态工具与框架》系统梳理 Go 语言在实际工程中的主流工具链与框架选型思路,涵盖 Web 框架、RPC 通信、依赖管理、测试工具、代码生成与项目结构设计等内容。通过真实项目场景解析不同工具的适用边界与组合方式,帮助开发者构建高效、可维护的 Go 工程体系,并提升团队协作与交付效率。

1

2026.02.24

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PHP课程
PHP课程

共137课时 | 12.4万人学习

JavaScript ES5基础线上课程教学
JavaScript ES5基础线上课程教学

共6课时 | 11.3万人学习

PHP新手语法线上课程教学
PHP新手语法线上课程教学

共13课时 | 0.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号