通过 $_SESSION 维护状态 - 对象序列化


Maintaining state - object serialization through $_SESSION

我正在开发我的第一个项目,我已经阅读了一些关于跨页面维护状态的阅读。从我花在这个主题上的几个小时来看,使用 $_SESSION 进行序列化和反序列化似乎是一种非常简单有效的方法。

然而,由于两个主要(经常有争议的(原因,它似乎不受欢迎:

  • 性能
  • 安全

我的项目中有一个非常典型的(3页(申请流程 1>选择类别 2>输入详细信息 3>确认 => 添加到数据库。将我的对象信息存储在 $_SESSION 中是有意义的。

在性能方面,序列化对象的时间约为 4 微秒

,取消序列化的时间约为 5 微秒。

看起来(从我的阅读来看(首选方法是使用实际的数据存储,但肯定会要求数据库保存和检索这些(通常是部分(信息需要更长的时间,并且会产生更多的代码?

在安全方面,我知道实际的会话信息存储在服务器上,所以这不是安全的吗?

我意识到以前有人问过这个问题,但我发现最接近的是 7 年前问

过的

PHP:将"对象"存储在 $_SESSION

并正在寻找更多最新的意见。

TL;DR:恕我直言,如果在系统要求范围内,在会话中存储对象并不是什么大问题

长话短说:这实际上取决于系统的要求/规格。即网络服务器是共享的,每个人都可以读取会话存储......然后我不会将其存储在会话:P中...我根本不会存储会话

从需求的角度来看:是否要求用户能够在此过程中从他离开的地方继续?如果是这样,我会使用"持久"存储(即数据存储(。如果它是一个无法恢复的进程(仅在当前会话期间有效(,我不会费心将其存储在数据存储中。

由于涉及安全性:如果您的Web服务器受到威胁,他们也有可能访问数据库服务器(例如:从脚本中获取数据库登录信息等(。这意味着您的数据无论如何都会受到损害。无论哪种方式,如果他们愿意,他们都可以获取数据。

我从您的阅读中对您的建议:只需使用会话,因为它更容易实现(更少的代码(