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

时间:2016-02-02 14:42:42

标签: php session serialization

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

但是,由于两个主要(通常是有争议的)原因,它似乎不受欢迎:

  • 表现
  • 安全

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

在性能方面,序列化对象的时间大约是4微秒,反序列化的时间是5微秒。

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

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

我意识到这已被问过,但我找到的最接近的是7年前被问到的

PHP: Storing 'objects' inside the $_SESSION

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

1 个答案:

答案 0 :(得分:0)

<强> TL; DR: 如果在系统要求范围内,IMHO在会话中存储对象并不是什么大问题

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

从要求的角度来看:用户是否需要在过程中从中断处取走?如果是这样,我将使用“持久”存储(即数据存储)。如果它是一个无法恢复的进程(仅在当前会话期间有效),我就不会将其存储在数据存储区中。

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

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