【问题标题】:Maintaining state - object serialization through $_SESSION通过 $_SESSION 维护状态 - 对象序列化
【发布时间】:2016-05-11 10:23:41
【问题描述】:

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

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

  • 性能
  • 安全性

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

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

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

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

我知道以前有人问过这个问题,但我找到的最接近的是 7 年前问过的

PHP: Storing 'objects' inside the $_SESSION

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

【问题讨论】:

    标签: php session serialization


    【解决方案1】:

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多